如何判断当前操作系统是否为x64?百度了一下,几乎全是这个答案
- BOOL IsWow64()
- {
- typedef BOOL(WINAPI *ISWOW64PROCESS)(HANDLE, PBOOL);
- ISWOW64PROCESS fnIsWow64Process;
- BOOL bIsWow64 = FALSE;
- fnIsWow64Process = (ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
- if (fnIsWow64Process != nullptr)
- fnIsWow64Process(GetCurrentProcess(), &bIsWow64);
- return bIsWow64;
- }
这个代码在大多数时候确实是没有问题的,因为他们的程序都是x86编译的!最后一传十,十传百。。。
其实MSDN上已经明确说明了IsWow64Process函数的第2个参数,当你的进程是x64且系统是x64的时候这个函数是会返回FALSE的
也就是说,在两边都是x64的情况下,上面的代码将会返回FALSE!
那么怎么真正准确的判断当前系统是不是x64呢?我用的检查ntdll的导出函数的办法,简洁有效
- inline bool IsWow64()
- {
- #ifdef _WIN64
- return true;
- #else
- return GetProcAddress(GetModuleHandle(TEXT("ntdll")), "NtWow64DebuggerCall") == nullptr ? false : true;
- #endif
- }
原文地址: