Przekierowanie systemu plików
Katalog %windir%\System32 jest zarezerwowany dla aplikacji 64-bitowych w 64-bitowym systemie Windows. Większość nazw plików DLL nie została zmieniona podczas tworzenia 64-bitowych wersji bibliotek DLL, więc 32-bitowe wersje bibliotek DLL są przechowywane w innym katalogu. WOW64 ukrywa tę różnicę przy użyciu przekierowania systemu plików .
W większości przypadków, gdy aplikacja 32-bitowa próbuje uzyskać dostęp do %windir%\System32, %windir%\lastgood\system32, or %windir%\regedit.exe, dostęp jest przekierowywany do ścieżki specyficznej dla architektury.
Nuta
Te ścieżki są udostępniane tylko do celów referencyjnych. W celu zapewnienia zgodności aplikacje nie powinny używać tych ścieżek bezpośrednio. Zamiast tego powinni wywołać interfejsy API opisane poniżej.
Oryginalna ścieżka | Ścieżka przekierowana dla 32-bitowych procesów x86 | Ścieżka przekierowana dla 32-bitowych procesów usługi ARM |
---|---|---|
%windir%\System32 | %windir%\SysWOW64 | %windir%\SysArm32 |
%windir%\lastgood\system32 | %windir%\lastgood\SysWOW64 | %windir%\lastgood\SysArm32 |
%windir%\regedit.exe | %windir%\SysWOW64\regedit.exe | %windir%\ SysArm32\regedit.exe |
Jeśli dostęp powoduje, że system wyświetli monit kontroli dostępu użytkownika, przekierowanie nie nastąpi. Zamiast tego jest uruchamiana 64-bitowa wersja żądanego pliku. Aby zapobiec temu problemowi, określ katalog SysWOW64, aby uniknąć przekierowania i zapewnić dostęp do 32-bitowej wersji pliku, lub uruchomić 32-bitową aplikację z uprawnieniami administratora, aby monit OAC nie był wyświetlany.
Windows Server 2003 i Windows XP: kontrola konta użytkownika nie jest obsługiwana.
Niektóre podkatalogi są wykluczone z przekierowania. Dostęp do tych podkatalogów nie jest przekierowywany do %windir%\SysWOW64:
- %windir%\system32\catroot
%windir%\system32\catroot2
%windir%\system32\driverstore
%windir%\system32\drivers\etc
%windir%\system32\logfiles
%windir%\system32\spool
Windows Server 2008, Windows Vista, Windows Server 2003 i Windows XP: %windir%\system32\driverstore jest przekierowywany.
Aby pobrać nazwę katalogu systemu 32-bitowego, aplikacje 64-bitowe powinny używać funkcji GetSystemWow64Directory 2 (Windows 10, wersja 1511) lub GetSystemWow64Directory.
Aplikacje powinny używać funkcji SHGetKnownFolderPath w celu określenia nazwy katalogu %ProgramFiles%.
Windows Server 2003 i Windows XP: aplikacje powinny używać funkcji SHGetSpecialFolderPath, aby określić nazwę katalogu %ProgramFiles%.
Aplikacje mogą kontrolować przekierowanie systemu plików WOW64 przy użyciu Wow64DisableWow64FsRedirection, Wow64EnableWow64FsRedirectioni Wow64RevertWow64FsRedirection. Wyłączenie przekierowania systemu plików ma wpływ na wszystkie operacje na plikach wykonywane przez wątek wywołujący, dlatego powinno być wyłączone tylko wtedy, gdy jest to konieczne dla pojedynczego CreateFile wywołania i ponowne włączenie ponownie natychmiast po powrocie funkcji. Wyłączenie przekierowania systemu plików przez dłuższy czas może uniemożliwić 32-bitowe aplikacje ładowania bibliotek DLL systemu, co powoduje niepowodzenie aplikacji.
Aplikacje 32-bitowe mogą uzyskać dostęp do natywnego katalogu systemowego, zastępując %windir%\Sysnative dla %windir%\System32. WOW64 rozpoznaje system sysnative jako specjalny alias używany do wskazywania, że system plików nie powinien przekierowywać dostępu. Ten mechanizm jest elastyczny i łatwy w użyciu, dlatego jest zalecanym mechanizmem pomijania przekierowania systemu plików. Należy pamiętać, że aplikacje 64-bitowe nie mogą używać aliasu sysnative, ponieważ nie jest to katalog wirtualny, który nie jest rzeczywistym.
Windows Server 2003 i Windows XP: Dodano alias sysnative począwszy od systemu Windows Vista.