我正在运行 Windows 8 Enterprise x64。我使用管理员组的帐户登录。当我打开 Windows 资源管理器或命令提示符时,我可以看到文件cdd.dll
:
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
,许多其他文件也不同。我被告知这是 文件系统虚拟化,对此我了解甚少。
您能否解释一下或给我一个参考资料来解释这实际上是如何工作的?该文件夹实际上有几个不同的实例吗?它们在磁盘上的物理位置是什么?是否可以从 32 位进程访问与默认显示给 32 位进程的文件夹System32
不同的文件夹中的文件。System32
答案1
问题是文件夹重定向, 如果 32 位程序尝试访问该%windir%\System32
文件夹,它将被不可见地重定向到该%windir%\SysWOW64
目录,这是为了实现 32/64 位应用程序兼容性。
System32 中的所有文件都是 64 位的,但是如果程序编写错误,它们可能在寻找 DLL 时将 System32 硬编码到程序中。为了防止因编写错误的程序而导致随机程序崩溃,Microsoft 会进行重定向。
如果您需要访问 System32 文件夹而不是 SysWOW64 文件夹,请导航到“隐藏”文件夹%windir%\sysnative
,它将带您进入“真实”System32
文件夹,然后您就可以像平常一样浏览该文件夹。
答案2
WOW64(Windows on Windows 64bit)使用各种技术来支持 32 位应用程序。其中包括文件夹和注册表重定向器。
Windows 开发人员中心:桌面运行 32 位应用程序