檔系統重新導向器
%windir%\System32 目錄會保留給 64 位 Windows 上的 64 位應用程式。 建立 DLL 的 64 位版本時,大部分的 DLL 檔名都不會變更,因此 32 位版本的 DLL 會儲存在不同的目錄中。 WOW64 會使用 檔案系統重新導向器來隱藏這項差異。
在大部分情況下,每當 32 位應用程式嘗試存取 %windir%\System32, %windir%\lastgood\system32, or %windir%\regedit.exe時,就會將存取重新導向至架構特定的路徑。
注意
這些路徑僅供參考。 為了相容,應用程式不應該直接使用這些路徑。 相反地,他們應該呼叫以下所述的 API。
原始路徑 | 32 位 x86 進程的重新導向路徑 | 32 位 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 |
如果存取會導致系統顯示 UAC 提示,則不會發生重新導向。 相反地,會啟動要求的檔案 64 位版本。 若要避免此問題,請指定 SysWOW64 目錄以避免重新導向,並確保能夠存取 32 位版本的檔案,或以系統管理員許可權執行 32 位應用程式,如此就不會顯示 UAC 提示。
Windows Server 2003 和 Windows XP:不支援 UAC。
某些子目錄不受重新導向的豁免。 這些子目錄的存取權不會重新導向至 \SysWOW64 %windir%:
- %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 和 Windows XP: %windir%\system32\driverstore 會重新導向。
若要擷取 32 位系統目錄的名稱,64 位應用程式應該使用 GetSystemWow64Directory2 函式 (Windows 10 版本 1511) 或 GetSystemWow64Directory 函式。
應用程式應該使用 SHGetKnownFolderPath 函式來判斷 %ProgramFiles% 目錄名稱。
Windows Server 2003 和 Windows XP: 應用程式應該使用 SHGetSpecialFolderPath 函式來判斷 %ProgramFiles% 目錄名稱。
應用程式可以使用 Wow64DisableWow64FsRedirection、Wow64EnableWow64FsRedirection和 Wow64RevertWow64FsRedirection 函式來控制 WOW64 文件系統重新導向器。 停用文件系統重新導向會影響呼叫線程所執行的所有檔案作業,因此只有在單一 CreateFile 呼叫時,才應該停用它,並在函式傳回后立即重新啟用。 停用檔案系統重新導向較長的時間可能會讓32位應用程式無法載入系統 DLL,導致應用程式失敗。
32 位應用程式可以藉由 %windir%\Sysnative 取代 %windir%\System32 來存取原生系統目錄。 WOW64 會將 Sysnative 辨識為特殊別名,用來指出文件系統不應該重新導向存取權。 此機制具有彈性且易於使用,因此,這是略過文件系統重新導向的建議機制。 請注意,64 位應用程式無法使用 Sysnative 別名,因為它是虛擬目錄而非實際目錄。
Windows Server 2003 和 Windows XP: 從 Windows Vista 開始新增 Sysnative 別名。