IsWow64并不能用来检测是否是Windows 32bit系统还是64bit系统
来源:互联网 发布:excel数据上下颠倒 编辑:程序博客网 时间:2024/05/21 21:47
如何当前操作系统是不是64位?如何判断当前应用程序是否在Wow64下运行?
首先什么是Wow64?很多朋友一看到64就认为这个方法是判断当前系统是否是64bit的,其实不然。Wow64是Windows-On-Windows64的意思,它是指在64位的操作系统上(不是指64位的CPU)运行32位应用程序的兼容平台。
下面是MSDN中一段IsWow64的应用程序:
BOOL IsWow64() { typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL bIsWow64 = FALSE; fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(_T("kernel32")), "IsWow64Process"); if (NULL != fnIsWow64Process) { fnIsWow64Process(GetCurrentProcess(),&bIsWow64); } return bIsWow64; }
下面的代码用来检测这个程序的结果:
if( IsWow64() == TRUE ){ _tprintf(_T("IsWow64() == TRUE\n"));}else{ _tprintf(_T("IsWow64() == FALSE\n"));}
让我们编译一下这个程序。
我们需要的是64位的操作系统,比如XP64bit,Windows 2008 R2等都是64bit操作系统。
在64位的操作系统上运行的kernel32.dll中,将会实现IsWow64Process方法,而在32位系统中提供的kernel32.dll中则没有提供相关函数的实现。
比较迷惑人的则是bIsWow64,其实仔细看MSDN中的Remark,会发现:
If the application is a 64-bit application running under 64-bit Windows, the Wow64Process parameter is set to FALSE.也就是说64位应用程序跑在64位的操作系统上,bIsWow64的值将是FALSE而不是TRUE。
因此我们需要分别将我们的程序编译成Win32平台和x64平台的,如果你用Visual Studio进行编译,默认安装则只包含32位的编译器/链接器,即便你是在64位操作系统上安装,也是一样的。你需要在VC++节点下勾选x64选项才可以,Itanium则需要在Server平台下安装才可勾选。然后在编译的时候,分别选择Win32和x64进行编译。
编译后,运行,结果如我们分析的一样:
在64位系统上运行Win32编译配置的结果是IsWow64() == TRUE,而x64编译配置的结果是IsWow64() == FALSE。
如果想要知道当前系统是否是64位的,则可以通过下面的方法:
BOOL Is64bitSystem(){ SYSTEM_INFO si; GetNativeSystemInfo(&si); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ) { return TRUE; } else { return FALSE; } }
注意:需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。
- IsWow64并不能用来检测是否是Windows 32bit系统还是64bit系统
- IsWow64并不能用来检测是否是Windows 32bit系统还是64bit系统
- IsWow64并不能用来检测是否是Windows 32bit系统还是64bit系统
- 程序判断Windows系统是32bit还是64bit
- 确定windows系统是32bit还是64bit
- 如何获得系统是32bit还是64bit?
- 如何查看LINUX系统是32bit还是64bit
- 使用cmd命令批处理判断windows系统是32bit还是64bit
- 如何知道系统是 64 bit 还是 32 位
- 如何查看 Mac os 的系统是32bit 还是64bit 的?
- 如何在Window 64bit系统上面区分此应用程序是32bit还是64bit的呢?
- 查看windows系统的版本号,制作版本号,32bit还是64bit等
- 【写一个C程序验证系统是32bit/64bit,验证系统是大端对齐还是小端对齐】
- 检查系统是否支持64bit,以及32bit与64bit的转换
- 32bit还是64bit
- python检测windows系统是32还是64位
- 如何知道可执行文件是32-bit还是64-bit
- 如何知道可执行文件是32-bit还是64-bit
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
- hdu4046 不错的线段树单点更新
- shell编程总结
- 八一八C语言中那些稀奇古怪的类型!
- Image 相关的类
- IsWow64并不能用来检测是否是Windows 32bit系统还是64bit系统
- 如果此程序没有正确安装,请选用与此版本兼容的设置重新安装”C#程序的解决办法
- Android CTS兼容性测试
- Qt For Android
- debian修改apt-get安装源
- 正则表达式30分钟入门教程
- 侧边栏交互的利弊
- 约瑟夫环问题
- MATLAB——rem(x,y) & mod(x,y)