Dlaczego różne procesy widzą różne wystąpienia folderu System32?

10

Korzystam z systemu Windows 8 Enterprise x64. Zalogowałem się przy użyciu konta z grupy Administratorzy. Po otwarciu Eksploratora Windows lub wiersza polecenia mogę zobaczyć plik cdd.dll:

Eksplorator 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

Ale jeśli otworzę okno dialogowe Otwórz plik w przeglądarce Chrome, Visual Studio lub niektórych innych aplikacjach (wszystkie są aplikacjami 32-bitowymi) i przejdę do C:\Windows\system32tego, nie ma takiego pliku (filtr jest ustawiony na wyświetlanie wszystkich plików). A jeśli wywołam element menu kontekstowego „Otwórz okno polecenia tutaj” za pomocą Shift + RightClick w oknie dialogowym Otwórz plik i wpisz, dirże potwierdzi, że nie ma takiego pliku:

Otwórz okno dialogowe plików


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

Ten efekt nie jest specyficzny cdd.dll, wiele innych plików również się różni. Powiedziano mi, że jest to efekt wirtualizacji systemu plików , o którym niewiele wiem.

Czy możesz wyjaśnić lub podać referencje wyjaśniające, jak to naprawdę działa? Czy faktycznie istnieje kilka różnych instancji System32folderu. Jaka jest ich fizyczna lokalizacja na dysku? Czy jest możliwy dostęp z 32-bitowych plików procesowych w innym System32folderze niż pokazany domyślnie do procesów 32-bitowych?

Vladimir Reshetnikov
źródło
Czy pojawiają się w aplikacjach x64? Mam przeczucie, że system Windows „ukrywa” 64-bitowe sterowniki (cdd.dll to sterownik ekranu) w aplikacjach 32-bitowych.
Nathan C
Tak, wszystkie 64-bitowe aplikacje, które pozwalają przeglądać system plików (np. Mają okno dialogowe Otwórz plik), pokazują te same pliki co Eksplorator Windows.
Vladimir Reshetnikov
@VladimirReshetnikov Czy jest coś, czego nadal nie rozumiesz, zredagowałeś swoje pytanie, ale nie podałeś już żadnych szczegółów, nie zaakceptowałeś też żadnej z odpowiedzi. Czy potrzebujesz czegoś jeszcze wyjaśnionego?
Scott Chamberlain,
@ ScottChamberlain Właśnie edytowałem tagi. Twoja odpowiedź jest bardzo dobra. Dzięki!
Vladimir Reshetnikov

Odpowiedzi:

11

Problemem jest przekierowanie folderu , jeśli 32-bitowy program spróbuje uzyskać dostęp do %windir%\System32folderu, zostanie niewidocznie przekierowany do %windir%\SysWOW64katalogu, jest to zgodne z 32/64-bitową kompatybilnością aplikacji.

Wszystkie pliki w System32 są 64-bitowe, jednak jeśli program został niepoprawnie napisany, być może na stałe wpisał System32 do swojego programu, gdy szuka DLL. Aby zapobiec przypadkowym awariom programów z niepoprawnie napisanych programów, Microsoft to przekierowuje.

Jeśli potrzebujesz dostępu do folderu System32, a nie do folderu SysWOW64, przejdź do folderu „ukrytego”, %windir%\sysnativektóry przeniesie Cię do System32folderu „prawdziwego” i możesz przeglądać folder w normalny sposób.

Scott Chamberlain
źródło
%windir%jest zmienną środowiskową, można ją wpisać dokładnie tak, jak w systemie Windows, i zadziała, 99% czasu reprezentujeC:\Windows
Scott Chamberlain
4

WOW64 (Windows na Windows 64bit) wykorzystuje różne technologie / techniki do obsługi aplikacji 32bit. Wśród nich są przekierowania folderów i rejestru.

Windows Dev Center: Pulpit z 32-bitowymi aplikacjami

Brian
źródło
A dokładniej informacje o profilach kompatybilności aplikacji, dzięki którym ta magia się dzieje.
David Hoelzer