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

新手上路,请多包涵

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

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

阅读 1.1k
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 许可协议

推荐问题