Чому різні процеси бачать різні екземпляри папки System32?


10

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

Провідник Windows


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-бітних додатків.
Натан C

Так, усі 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 Dev: на робочому столі 32-розрядні програми


А точніше, інформація про профілі сумісності додатків, завдяки чому відбувається ця магія.
David Hoelzer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.