x64系统的判断和x64下文件和注册表访问的重定向(举例了GetProcAddress后转成函数指针的用法)
2024-08-31 01:38:24
判断一个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
最新文章
- 证书与keytool
- STDMETHOD_,STDMETHOD,__declspec(novtable)和__declspec(selectany)
- perl 访问网站一些useragent的设置
- The Swift Programming Language-官方教程精译Swift(2)基础知识
- 浙大pat1019题解
- 开源项目AndroidReview学习小结(1)
- 【做题】CERC2017B. Buffalo Barricades——时间倒流
- maya权重拷贝一对一,一对多
- 5.1HTML+CSS制作一颗流星
- [升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)
- 新闻思考-阿里进军游戏产业,苹果发力ARM芯片
- oracle小记:dba_data_files
- 阶段01Java基础day21IO流02
- MIDAS.dll 出错时 (Error loading MIDAS.DLL.)
- 20145122《Java面向对象程序设计》实验二实验报告
- static关键字的内存分析
- java静态初始化数据
- OpenCV中的新函数connectedComponentsWithStats使用
- MySQL之查漏补缺
- JS监控手机或APP返回事件