IsWow64的真实用途
如何当前操作系统是不是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的真实用途相关推荐
- #if 0 ... #endif的真实用途
在过去都没有去理会#if 的作用,今天突发奇想,开启编译器试一试. 很多人都知道,#if 0 ... #endfif的作用跟/*...*/的作用是一样的,就是注释,可是注释为什么不用注释符号/ ...
- 前端Js框架 UI框架汇总 特性 适用范围 选择
身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做为一个长期优化贴,欢迎指 ...
- 图解|通用搜索引擎背后的技术点
1. 写在前面 今天准备和盆友们一起学习下关于通用搜索引擎的一些技术点. 鉴于搜索引擎内容非常多,每一部分都够写好几篇文章的所以本文只是抛砖引玉,深入挖掘还得老铁们亲力亲为. 通过本文你将对通用搜索引 ...
- 测试私有方法 重构_通过测试学Go:指针和错误
点击上方蓝色"Go语言中文网"关注我们,领全套Go资料,每天学习 Go 语言 你可以在这里找到本章的所有代码[1] 我们在上一节中学习了结构体(structs),它可以组合与一个概 ...
- 2018几大主流的 UI/JS 前端框架
2016年开始应该是互联网飞速发展的几年,同时也是Web前端开发非常火爆的一年,Web 前端技术发展速度让人感觉几乎不是继承式的迭代,而是一次次的变革和创造.这一年中有很多热门的前端开发框架,下面源码 ...
- php关键词分词搜索 最多匹配的排在最前面_图解 | 通用搜索引擎背后的技术点...
来源 | 后端技术指南针头图 | 图虫 写在前面 今天准备和盆友们一起学习下关于通用搜索引擎的一些技术点. 鉴于搜索引擎内容非常多,每一部分都够写好几篇文章的所以本文只是抛砖引玉,深入挖掘还得老铁们亲 ...
- 《Go语言圣经》学习笔记 第十章 包和工具
<Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...
- Web 前端框架分类解读
Web前端框架可以分为两类: JS的类库框架 JQuery.JS Angular.JS(模型, scope作用域,controller,依赖注入,MVVM):前端MVC Vue.JS(MVVM)*** ...
- 企业微信H5_网页jssdk调用 判断当前客户端版本是否支持指定JS接口
接上一篇:企业微信H5_网页jssdk调用,ticket签名config及示例https://gblfy.blog.csdn.net/article/details/123170569 文章目录 一. ...
最新文章
- python中classes和class的区别-Python中的Classes和Metaclasses详解
- IO操作Dex文件加密,APK加固项目实战
- 《机器学习实战》第5章 随机梯度上升算法
- 微信小程序组件间通信(二)
- Web服务器超时处理
- CRI陆宵吴:夯实底层,音视频技术未来不远
- 剑指offer58-||.左旋转字符串
- php 如何实现全选,如何用thinkphp框架实现全选,反选,全不选功能?
- 使用Excel调用ABAP系统的函数
- tcp实时传输kafka数据_tcp怎么传输大数据
- LuoguP1131 [ZJOI2007]时态同步
- 简单的控制台五子小游戏棋程序(Java)
- 全球最大地标识别数据集问世:包含200万张图片和3万处地标
- 在线Javascript压缩工具
- oracle 客户端连接数_查看oracle数据库允许的最大连接数和当前连接数
- Linux常用命令汇总--tree
- oracle 数据库 双机,oracle双机热备份方法
- springmvc ResponseEntity 下载文件损坏问题解决方法
- matlab simulink入门:搭建一个简单的电路
- html盒模型中border的写法,CSS盒模型--边框设置:border: 1px solid red(像素 样式 颜色 ),border-bottom:1px dotted #ccc...