为什么不同的进程看到System32文件夹的不同实例?


10

我正在运行Windows 8 Enterprise x64。我使用管理员组的帐户登录。当我打开Windows资源管理器或命令提示符时,我可以看到该文件cdd.dll

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

但是,如果我从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,许多其他文件也有所不同。有人告诉我这是 文件系统虚拟化的影响,对此我了解甚少。

您能否解释一下,或者给我参考一下,说明它实际上是如何工作的?System32文件夹中实际上有几个不同的实例吗?它们在磁盘上的物理位置是什么?System32默认情况下,是否可以从与所示文件夹不同的另一文件夹中的32位进程文件访问文件。


它们是否出现在任何x64应用程序中?我有一种预感,Windows会从32位应用程序“隐藏” 64位驱动程序(cdd.dll是显示驱动程序)。
内森·C

是的,所有允许浏览文件系统(例如,具有“打开文件”对话框)的64位应用程序都显示与Windows资源管理器相同的文件。
弗拉基米尔·雷谢尼科夫2013年

@VladimirReshetnikov是否有您尚不了解的内容,您编辑了问题,但未包含更多详细信息,您也未接受任何答案。您还需要其他澄清吗?
Scott Chamberlain

@ScottChamberlain我刚刚编辑标签。您的回答非常好。谢谢!
弗拉基米尔·雷谢尼科夫2013年

Answers:


11

问题是文件夹重定向,如果32位程序尝试访问该%windir%\System32文件夹,它将被无形地重定向到%windir%\SysWOW64目录,这是为了实现32/64位应用程序兼容性。

System32中的所有文件都是64位,但是,如果程序编写错误,则在寻找DLL时可能会将System32硬编码到其程序中。为了防止由于程序编写错误而导致随机程序崩溃,Microsoft会进行重定向。

如果您需要访问System32文件夹而不是SysWOW64文件夹,请导航至“隐藏”文件夹%windir%\sysnative,该文件夹将带您进入“真实” System32文件夹,并且您可以像平常一样浏览该文件夹。


%windir%是一个环境变量,你可以在就像在窗口中键入它,它会工作,它代表了99%的时间C:\Windows
斯科特张伯伦

4

WOW64(Windows 64位上的Windows)使用各种技术来支持32位应用程序。其中包括文件夹和注册表重定向器。

Windows Dev Center:运行32位应用程序的桌面


更具体地说,有关应用程序兼容性配置文件的信息正是使这种魔术发生的原因。
David Hoelzer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.