判断操作系统是否为x64的方法

如何判断当前操作系统是否为x64?百度了一下,几乎全是这个答案

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. BOOL IsWow64()  
  2. {  
  3.     typedef BOOL(WINAPI *ISWOW64PROCESS)(HANDLEPBOOL);  
  4.     ISWOW64PROCESS fnIsWow64Process;  
  5.     BOOL bIsWow64 = FALSE;  
  6.     fnIsWow64Process = (ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process");  
  7.     if (fnIsWow64Process != nullptr)  
  8.         fnIsWow64Process(GetCurrentProcess(), &bIsWow64);  
  9.     return bIsWow64;  
  10. }  

这个代码在大多数时候确实是没有问题的,因为他们的程序都是x86编译的!最后一传十,十传百。。。

其实MSDN上已经明确说明了IsWow64Process函数的第2个参数,当你的进程是x64且系统是x64的时候这个函数是会返回FALSE的

也就是说,在两边都是x64的情况下,上面的代码将会返回FALSE!


那么怎么真正准确的判断当前系统是不是x64呢?我用的检查ntdll的导出函数的办法,简洁有效

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. inline bool IsWow64()  
  2. {  
  3. #ifdef _WIN64  
  4.     return true;  
  5. #else  
  6.     return GetProcAddress(GetModuleHandle(TEXT("ntdll")), "NtWow64DebuggerCall") == nullptr ? false : true;  
  7. #endif  
  8. }  


原文地址:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值