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

1043
Vladimir Reshetnikov

Я использую 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-разрядных процессов по умолчанию.

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

2 ответа на вопрос

11
Scott Chamberlain

The issue is folder redirection, If a 32 bit program attempts to access the %windir%\System32 folder it will be invisibly redirected to the %windir%\SysWOW64 directory, this is for 32/64 bit application compatibility.

All the files in System32 are 64 bit, however if a program was incorrectly written they may have hardcoded the System32 in to their program when looking for a DLL. To prevent random program crashes from incorrectly written programs Microsoft does that redirect.

If you need to access the System32 folder and not the SysWOW64 folder navigate to the "hidden" folder %windir%\sysnative which will take you to the "real" System32 folder and you can browse the folder like normal.

`% windir%` - это переменная окружения, вы можете ввести ее так же, как в Windows, и она будет работать, 99% времени она представляет `C: \ Windows` Scott Chamberlain 10 лет назад 0
4
Brian

WOW64 (Windows on Windows 64bit) uses various technologies/techniques to support 32bit applications. Among those is Folder and Registry redirectors.

Windows Dev Center: Desktop Running 32-bit Applications

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