微软官方提供了一些文档,详细说明了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
下的文件.