x64系统的判断和x64下文件和注册表访问的重定向(举例了GetProcAddress后转成函数指针的用法)
判断一个32位应用程序是否运行在x64系统下,可以使用下面的代码:
- BOOL IsX64System()
- {
- BOOL bIsWow64 = FALSE;
- typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
- LPFN_ISWOW64PROCESS pfnIsWow64 = NULL;
- pfnIsWow64 = (LPFN_ISWOW64PROCESS)GetProcAddress(
- GetModuleHandle(_T("kernel32.dll")), "IsWow64Process");
- if (pfnIsWow64)
- {
- if (!pfnIsWow64(GetCurrentProcess(), &bIsWow64))
- {
- // handle error
- }
- }
- return bIsWow64;
- }
函数返回真则是运行在x64下,其实IsWow64Process是一个API,这里之所以从dll中导出来使用是因为32位系统的kernel32.dll里面是没有这个函数导出函数的,直接使用有问题。另外就是我看了几份网上的代码,写得有点小问题,很多是判断IsWow64Process的返回值来决定是否运行在x64下,这是不对的,说明下,IsWow64Process的返回值只说明函数是否成功了,要看是否运行在x64下要看这个API第二个传出参数的值。
另外就是获得处理器的架构,数量页面大小时,x64下要调用GetNativeSystemInfo,而32位系统是调用GetSystemInfo,有点点小小的区别,要注意一下,详细可以参见一下MSDN,代码在下面,GetNativeSystemInfo要导出来使用的原因同上(主要是防止意外):
- BOOL GetSystemInfoEx(SYSTEM_INFO *pSystemInfo)
- {
- BOOL bRet = FALSE;
- if (!pSystemInfo)
- goto Exit0;
- typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
- PGNSI pfnGNSI = NULL;
- ZeroMemory(pSystemInfo, sizeof(SYSTEM_INFO));
- if (IsX64System())
- {
- // x64下要调用这个API
- pfnGNSI = (PGNSI)GetProcAddress(
- GetModuleHandle(_T("kernel32.dll")), "GetNativeSystemInfo");
- if (!pfnGNSI)
- goto Exit0;
- pfnGNSI(pSystemInfo);
- }
- else
- {
- // 32位系统调用下面的API
- GetSystemInfo(pSystemInfo);
- }
- bRet = TRUE;
- Exit0:
- return bRet;
- }
可以看看我的系统o(∩_∩)o :

下次再讲讲x64下重定向的问题。
http://blog.csdn.net/magictong/article/details/5838863
x64系统的判断和x64下文件和注册表访问的重定向(举例了GetProcAddress后转成函数指针的用法)的更多相关文章
- x64系统的判断和x64下文件和注册表访问的重定向——补记
原来的地址 x64系统的判断和x64下文件和注册表访问的重定向(1) x64系统的判断和x64下文件和注册表访问的重定向(2) x64系统的判断和x64下文件和注册表访问的重定向(3) 之前在(3)里 ...
- ie下文件上传无权访问的问题
最近项目遇到个问题,ie下文件上传无权访问,在网上找了很久才找到答案,原来是因为ie下不能用js触发input=file的点击事件,必须手动点击才可以.
- WINDOWS XP 系统显示乱码的解决方法(修改注册表,使用正常字体)
一位同事的计算机进入WINDOWS XP系统后,电脑里的所有汉字全部显示乱码,很多办公文档无法打开而影响工作.因为第一次遇到这种问题,当然首先是百度解决了,搜索了相关的信息后找到了答案 ...
- XP系统显示文件夹选项属性被删除解决注册表
Title:XP系统显示文件夹选项属性被删除解决注册表 -- 2010-11-18 13:17 昨天中了个毒窝,还有恶意软件,十分不爽. 开始恶意软件把显示所有文件夹给删除了,去找了个注册表,重新注册 ...
- 【读书笔记】C#高级编程 第二十四章 文件和注册表操作
(一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByR ...
- 彻底清除Window7下的360注册表
当流氓360遇到强迫症,将注定有一场厮杀... 今天装了个虚拟机,其中win7系统是在网上随便下载了一个,是非纯净版的,自带了360在内的好多软件,其他软件都轻松删掉,但查看注册表时发现竟然有360残 ...
- 删除Oracle文件、注册表
用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设置->控制面板-& ...
- 【Visual Lisp】驱动器、目录、文件和注册表
;;驱动器.目录.文件.和注册表;;★★★01.获取并创建驱动器盘符组成的表★★★(setq Drives (vlax-get-property (vlax-create-object "S ...
- MFC学习 文件操作注册表操作
c读写文件 void CFileView::OnRead() { FILE *pFile = fopen("1.txt", "r"); /*char ch[10 ...
随机推荐
- 求 1~n 之间素数的个数
求1到n之间素数的个数 1. 筛选法 筛选掉偶数,然后比如对于 3,而言,筛选掉其整数倍数:(也即合数一定是某数的整数倍,比如 27 = 3*9) int n = 100000000; bool fl ...
- 使用UISegementControl实现简易Tomcat程序
// // TomViewController.m #import "TomViewController.h" #import <AVFoundation/AVFoundat ...
- Arcgis api for javascript学习笔记(3.2X版本)-Map图层叠加以及基本操作
1. 不设置默认底图,第一个图层作为底图,然后叠加另外一个图层 先添加图层1,第一个图层1作为默认底图,然后在图层1上叠加图层2,并设置图层2的透明度为50%. <!DOCTYPE html&g ...
- WPF 使用 Edge 浏览器
原文:WPF 使用 Edge 浏览器 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访 ...
- vue 使用ztree
1 全局引入jquery , 不明白的看我上一个的随笔 , 特别简单 2 我没有封装组件 , 项目里面这个效果的只用了一次 , 没有必要 在你的<script>标签下面引入这俩东西 , 前 ...
- WPF--动态添加控件、访问控件
//WPF窗口采用默认的Grid布局控件,其“Name”值为“grid1”,在“grid1”中添加三个Button按钮.动态添加控件并访问这些控件的代码如下: private void button1 ...
- 嵌套函数中的this
function countDown(){ var self = this; var doWork = function(){ console.log(this);//window console.l ...
- jvm常用优化方案和方法
新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快. 老年代 GC(Major GC ...
- Java--基础命名空间和相关东西(JAVA工程师必须会,不然杀了祭天)
java.lang (提供利用 Java 编程语言进行程序设计的基础类)java.lang.annotation(提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互)java.lang.inst ...
- 《DELPHI赋》
<DELPHI赋> -- 武汉NET_TO_DB DELPHI者,经典开发工具.美奂美仑之开发环境也.盖论DELPHI其身世,实为神界之神物,后借宝蓝公司之手,于1990年代,现于江湖. ...