文件系统重定向程序
05/31/2018
本文内容
% Windir% \ System32 目录是为64位 Windows 上的64位应用程序保留的。 在创建了64位版本的 Dll 时,大多数 DLL 文件名称未发生更改,因此32位版本的 Dll 存储在不同的目录中。 WOW64 使用 文件系统重定向 程序隐藏了这一差异。
在大多数情况下,只要32位应用程序尝试访问% windir% \ System32、% windir% \ lastgood \ System32 或% 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。
某些子目录已免于重定向。 无法将对这些子目录的访问重定向到% windir% \ SysWOW64:% windir% \ system32 \ catroot
% windir% \ system32 \ catroot2
% windir% \ system32 \ driverstore
% windir% \ system32 \ 驱动程序 \ 等
% windir% \ system32 \ 日志日志
% windir% \ system32 \ 假脱机
**Windows server 2008、Windows Vista、Windows Server 2003 和 WINDOWS XP: **% windir% \ system32 \ driverstore 已重定向。
若要检索32位系统目录的名称,64位应用程序应使用 GetSystemWow64Directory2 函数 (Windows 10,版本 1511) 或 GetSystemWow64Directory 函数。
应用程序应使用 SHGetKnownFolderPath 函数来确定% ProgramFiles% directory 名称。
Windows Server 2003 和 WINDOWS XP: 应用程序应使用 SHGetSpecialFolderPath 函数来确定% ProgramFiles% directory 名称。
应用程序可使用 Wow64DisableWow64FsRedirection、 Wow64EnableWow64FsRedirection和 Wow64RevertWow64FsRedirection 函数控制 WOW64 文件系统重定向程序。 禁用文件系统重定向会影响由调用线程执行的所有文件操作,因此仅在需要时才应禁用单个 CreateFile 调用,并在函数返回后立即重新启用。 禁用文件系统重定向的时间较长可能会阻止32位应用程序加载系统 Dll,从而导致应用程序失败。
32位应用程序可以通过将% windir% \ Sysnative 替换为% windir% System32 来访问本机系统目录 \ 。 WOW64 将 Sysnative 识别为一个特殊别名,用于指示文件系统不应重定向访问。 此机制非常灵活且易于使用,因此,推荐使用该机制来绕过文件系统重定向。 请注意,64位应用程序不能使用 Sysnative 别名,因为它不是真正的虚拟目录。
Windows Server 2003 和 WINDOWS XP: Sysnative 别名是从 Windows Vista 开始添加的。