如何确定进程是 32 位还是 64 位?

新手上路,请多包涵

给定一个 Windows 进程句柄,我如何使用 C++ 代码确定该进程是 32 位还是 64 位?

原文由 Johnny Pauling 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 899
2 个回答

如果你有模块的句柄,那么你可以这样做:

 IMAGE_NT_HEADERS * headers = ImageNtHeader(handle);

if ( headers->FileHeader.Machine == IMAGE_FILE_MACHINE_I386 )
{
    //module is x86
}
else if  ( headers->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64 )
{
    //module is x64
}

我从 自己的回答 中得到了帮助。

原文由 Nawaz 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您有进程句柄,请使用 IsWow64Process()

如果 IsWow64Process() 报告为真,则该进程是在 64 位操作系统上运行的 32 位进程。

如果 IsWow64Process() 报告错误(或在 kernel32.dll 中不存在),则该进程要么在 32 位操作系统上运行 32 位,要么在 64 位操作系统上运行 64 位位操作系统。 To know if the OS itself is 32-bit or 64-bit, use GetNativeSystemInfo() (or GetSystemInfo() if GetNativeSystemInfo() is not available in kernel32.dll )。

原文由 Remy Lebeau 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题