Почему разные процессы видят разные экземпляры папки System32?

10

Я использую Windows 8 Enterprise x64. Я вошел в систему, используя учетную запись из группы администраторов. Когда я открываю Windows Explorer или командную строку, я вижу файл cdd.dll:

проводник Виндоус


C:\Windows\system32>dir cdd.dll
 Volume in drive C has no label.
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of C:\Windows\system32

07/25/2012  09:49 PM           199,680 cdd.dll

Но если я открою диалоговое окно «Открыть файл» из браузера Chrome, Visual Studio или некоторых других приложений (все они являются 32-разрядными приложениями) и перейду к C:\Windows\system32файлу, то такого файла не будет (фильтр настроен на отображение всех файлов). И если я вызову пункт контекстного меню «Открыть командное окно здесь» с помощью Shift + RightClick в диалоговом окне «Открыть файл» и напечатаю dirего, это подтверждает, что такого файла нет:

Диалог открытия файла


C:\Windows\System32>dir cdd.dll
 Volume in drive C has no label.
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of C:\Windows\System32

File Not Found

Этот эффект не характерен для cdd.dllмногих других файлов. Мне сказали, что это эффект виртуализации файловой системы , о которой я очень мало знаю.

Не могли бы вы объяснить или дать мне ссылку, которая объясняет, как это на самом деле работает? Есть ли на самом деле несколько разных экземпляров System32папки. Каково их физическое расположение на диске? Можно ли получить доступ из 32-битного процесса файлов через в другой System32папке , чем показано на 32-битных процессов по умолчанию.

Владимир Решетников
источник
Они появляются в любых приложениях x64? У меня есть догадка, что Windows «скрывает» 64-битные драйверы (cdd.dll - драйвер дисплея) от 32-битных приложений.
Натан С
Да, все 64-разрядные приложения, которые позволяют просматривать файловую систему (например, имеют диалоговое окно «Открыть файл»), показывают те же файлы, что и проводник Windows.
Владимир Решетников
@VladimirReshetnikov Есть ли что-то, что вы до сих пор не поняли, вы отредактировали свой вопрос, но не включили больше деталей, вы также не приняли ни одного из ответов. Вам нужно что-то еще уточнить?
Скотт Чемберлен
@ScottChamberlain Я только что отредактировал теги. Вы отвечаете очень хорошо. Благодаря!
Владимир Решетников

Ответы:

11

Проблема заключается в перенаправлении папок. Если 32-битная программа пытается получить доступ к %windir%\System32папке, она будет незаметно перенаправлена ​​в %windir%\SysWOW64каталог, это для совместимости приложений с 32/64 битами.

Все файлы в System32 являются 64-битными, однако, если программа была написана неправильно, они, возможно, жестко закодировали System32 в своей программе при поиске DLL. Чтобы предотвратить случайные сбои программы от неправильно написанных программ, Microsoft делает это перенаправление.

Если вам нужен доступ к папке System32, а не к папке SysWOW64, перейдите в «скрытую» папку, %windir%\sysnativeкоторая приведет вас в «настоящую» System32папку, и вы сможете просматривать ее как обычно.

Скотт Чемберлен
источник
%windir%переменная окружения, вы можете ввести ее так же, как в Windows, и она будет работать в 99% случаевC:\Windows
Скотт Чемберлен,
4

WOW64 (Windows на Windows 64bit) использует различные технологии / методы для поддержки 32-битных приложений. Среди них редиректоры папок и реестра.

Центр разработки Windows: рабочий стол с 32-разрядными приложениями

Брайан
источник
А точнее, информация о профилях совместимости приложений, которая и делает эту магию возможной.
Дэвид Хоэлзер