微软官方提供了一些文档,详细说明了32位程序运行在64位windows上的不同:
“WOW64″即”Windows 32-bit On Windows 64-bit “的简称
一些细节:
- 32位程序操作注册表
HKLM/SOFTWARE时,会自动映射到HKLM/SOFTWARE/Wow6432Node,这个可以用64位regedit.exe看到 - 32位程序不能加载64位dll;64位程序不能加载32位dll
- 32位程序使用传统api不能获取64位进程数据。比如枚举进程必须用
EnumProcesses替代Process32First;获取进程/模块名时必须使用GetProcessImageFileName替代GetModuleBaseName - 系统变量值的变化,比如
$ProgramFile$的具体值在32位与64位下不同 - 判断本进程是否运行在wow64上,使用
IsWow64Process - 32位程序调用系统文件时,路径会被重定向,比如原
%windir%\System32下的系统文件会被定向至%windir%\SysWOW64下的文件.