当我们迁至64位版本Windows系统后,就会发现此时有两个独立的 Program Files文件夹,从直觉上这并不难理解;而且发现此时还有两个独立的存放可执行文件和DLL库的系统文件夹,它们分别是System32与 SysWOW64,但是System32中放的是64位文件,而SysWOW64放的竟然是32位文件!这真是匪夷所思啊!
我们早都知道,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文件夹。
在以往传统的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夹层,这样用户和程序员两边都不得罪。