IT笔记 · 2014年2月12日

32位程序运行在64位windows系统上时的注意点

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