Windows64位计算环境
WOW64机制
什么是WOW64机制
WOW64(Windows on Windows 64)机制就是一种在64位OS中支持运行32位应用程序的机制
起源:
微软认为64位OS的核心就是要向下兼容32位OS,所以创造了一个WOW64机制,使得32位应用程序能够很好的移植在64位OS中
WOW64机制的原理
在Windows 64位OS中,
64位应用程序会加载kernel32.dll(64位)和ntdll.dll(64位),
32位应用程序会加载kernel32.dll(32位)和ntdll.dll(32位)
WOW64会将ntdll.dll(32位)的请求(API调用)重定位到ntdll.dll(64位),
就是说,64位OS会为32位应用程序提供一个32位Windows的系统环境,让其能够运行,然后在中途用WOW64将其变为64位环境
文件夹结构
64位OS中系统文件夹其实是System32,里面存放的是64位文件,而SysWOW64里面存放的是32位文件
系统文件夹System32和SysWOW64
当你在64位应用程序中用GetSystemDirectory()API查看系统文件夹时,会返回System32
在32位应用程序中调用GetSystemDirectory()API查看系统文件夹时,也会返回System32
这是为什么呢?不是说System32文件夹放的是64位文件吗?32位应用程序返回的怎么是64位文件呢?
这里32位应用程序调用GetSystemDirectory()API,返回的实际内容的确是SysWOW64文件夹的内容,但是通过WOW64机制,64位OS将返回的文件夹名字又重定向为System32
程序文件夹Program Files和Program Files(x86)
调用SHGetSpecialFolderPath()API可以查看程序文件夹的路径
Program Files和Program Files(x86)跟System32和SysWOW64不一样,
在64位OS中,32位应用程序调用GetSystemDirectory()API,返回的和64位应用程序一样,都是System32,
在64位OS中,32位应用程序调用SHGetSpecialFolderPath()API时,返回的并不是Program
Files,WOW64会在中间将请求截获,然后返回Program Files(x86)文件夹
64位与32位注册表
64位OS中存在64位注册表项和32位注册表项,共存
32位的进程访问HKLM\SOFTWARE下的键时,WOW64会将其重定位到HKLM\SOFTWARE\Wow6432Node下的键