System32与SysWOW64的问题

2018-03-03 20:30
网络安全和信息化 2018年7期
关键词:程序员调用文件夹

当我们迁至64位版本Windows系统后,就会发现此时有两个独立的 Program Files文件夹,从直觉上这并不难理解;而且发现此时还有两个独立的存放可执行文件和DLL库的系统文件夹,它们分别是System32与 SysWOW64,但是System32中放的是64位文件,而SysWOW64放的竟然是32位文件!这真是匪夷所思啊!

从System32说起

我们早都知道,System32目录中存放着Windows系统文件,包括程序调用的DLL库文件以及我们在Windows常常会用到各种命令工具的.EXE文件,当然还包括一些第三方程序软件及其DLL文件。用户自行安装的应用程序主要是在Program Files文件夹,而这些应用通常是将系统级库文件存于System32文件夹。

在64位版本Windows中,会用文件夹“C:Program Files”存放64位的程序文件,而用“C:Program Files(x86)”文件夹存放32位程序文件,这并不难理解,因为64位的程序需要调用64位的DLL文件,而32位程序需要调用32位DLL文件。否则就会让程序无法运行。

但并非所有DLL文件都会放进Program Files。不仅Windows本身会将自己的系统库放入“C:System32”,而且另外安装的一些程序也会将库文件驻留此处,所以这就要求Windows像分离32位与64位的Program Files文件夹那样,也需要有能够分离32位与64位的System32文件夹。

System32 vs SysWOW64

在以往传统的32位机器上,所有32位程序都将其文件存放在“C:Program Files”,系 统 库 则 放 入“C:System32”。而在现代64位机上,64位程序则将其文件存放在“C:Program Files”,其64位库文件则放入“?C:WindowsSystem32”;32位程序会将其文件存入“C:Program Files (x86)”,其32位库文件则会放入文件夹“C: WindowsSysWOW64”之中。这听起来非常矛盾,但是从Windows系统看并无大碍,因为需要用户自己选择路径去存放DLL文件的情形非常罕见。

其实 “WOW64”名称或许就暗示在Windows 64-bit之上的Windows 32-bit软件。例如,当用户在64位Windows系统上安装32位程序时,该程序会习惯性地写入C:Program Files文件夹,此时64位Windows系统的文件系统重定向机制会让WoW64将其引向“C:Program Files (x86)”,然后当它想要寻访“C:WindowsSystem32”文件夹时,WoW64则会带它进入“C:WindowsSysWOW64”。

那么为何造成System32存64位,SysWOW64存32位这种“错置”现象的发生呢?有业内分析家表示,其原因大概是目前主流中坚的32位出身的程序员都习惯存放“C: WindowsSystem32”,这几乎已成为代码编写的一条铁律,要迫使开发人员改变这一貌似不讲理的习惯,恐会让很多项目搁浅,所以微软就在64位系统添加了WoW64夹层,这样用户和程序员两边都不得罪。

猜你喜欢
程序员调用文件夹
为了让妈妈看懂地图,一位“野生程序员”做了个小程序
怎样成为一名优秀程序员
Fast Folders,让你的文件夹四通八达
核电项目物项调用管理的应用研究
程序员之子
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
基于系统调用的恶意软件检测技术研究
加班
不容忽视的空文件夹