IsWow64Process实现

树莓派c语言串口通讯程序 在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一 阅读详情
使用IsWow64Process可以检测当前进程是否运行在WOW64环境下(WOW64 is the x86 emulator that allows Win32-based applications to run on 64-bit Windows),有些人也把它用来检测CPU位数(这用法是错误的)
在MSDN上也有这个函数的使用方法,当然我还是写了个,注意的是IsWow64Process第一个参数是一个有QUERY权限的进程句柄.
BOOL IsWow64Current()
{
	FARPROC fnIsWow64Process;
	BOOL bIsWow64;


	bIsWow64 = FALSE;
	fnIsWow64Process = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "IsWow64Process");


	if(fnIsWow64Process)
		if(((BOOL (WINAPI *)(HANDLE, PBOOL))fnIsWow64Process)(GetCurrentProcess(), &bIsWow64))
			return bIsWow64;
	return FALSE;
}
嗯哼~那么来看看IsWow64Process的实现吧~
KERNELBASE!IsWow64Process:
759f8c8e 8bff            mov     edi,edi
759f8c90 55              push    ebp
759f8c91 8bec            mov     ebp,esp
759f8c93 56              push    esi
759f8c94 6a00            push    0 //ReturnLength
759f8c96 6a04            push    4 //ProcessInformationLength
759f8c98 8d4508          lea     eax,[ebp+8]
759f8c9b 50              push    eax //ProcessInformation
759f8c9c 6a1a            push    1Ah    //ProcessInformationClass::ProcessWow64Information
759f8c9e ff7508          push    dword ptr [ebp+8] //ProcessHandle
759f8ca1 ff1528109f75    call    dword ptr [KERNELBASE!_imp__NtQueryInformationProcess (759f1028)]
759f8ca7 8bf0            mov     esi,eax
759f8ca9 85f6            test    esi,esi ;NtQueryInformationProcess失败
759f8cab 0f8c35170200    jl      KERNELBASE!IsWow64Process+0x1f (75a1a3e6)


KERNELBASE!IsWow64Process+0x27:
759f8cb1 8b4d0c          mov     ecx,dword ptr [ebp+0Ch]
759f8cb4 33c0            xor     eax,eax
759f8cb6 394508          cmp     dword ptr [ebp+8],eax
759f8cb9 0f95c0          setne   al
759f8cbc 8901            mov     dword ptr [ecx],eax //把结果放在第二个参数的指向


KERNELBASE!IsWow64Process+0x34:
759f8cbe 33c0            xor     eax,eax
759f8cc0 85f6            test    esi,esi
759f8cc2 0f9dc0          setge   al //return (esi >= 0);
759f8cc5 5e              pop     esi
759f8cc6 5d              pop     ebp
759f8cc7 c20800          ret     8


KERNELBASE!IsWow64Process+0x1f:
75a1a3e6 56              push    esi
75a1a3e7 e8b9c7fdff      call    KERNELBASE!BaseSetLastNTError (759f6ba5)
75a1a3ec e9cde8fdff      jmp     KERNELBASE!IsWow64Process+0x34 (759f8cbe)
于是乎~很简单实现了IsWow64Process(顺便学会set指令怎么用了)
第 1 章 Prometheus 监控 | Prometheus 入门 了解 Prometheus 监控系统,学会安装及了解页面功能。 阅读详情

相关推荐

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 1591

IsWow64Process函数判断程序位数

IsWow64Process函数判断程序位数 IsWow64Process返回值为TRUE&FALSE,在MSDN上的解释和定义如下: BOOL IsWow64Process( HANDLE hProcess, //目标进程句柄 PBOOL Wow64Process //反出值TRUE&FALSE ); The IsWow64Process function determines whether the specified process is running under WOW

tatorey的博客 2445

UE4_用户控件_6_通过控件蓝图内部变量来修改进度条的值

发现控件类图类的引用和用户控类引用不兼容,修改变量类型。我们需要添加到视口,同时设置输入模式。创建按钮的点击事件,当点击时调用角色的自定义事件clearwidget。可以了,但是没有退出控件,没有鼠标,所以改进一下。

Growthofnotes的博客 1236

WOW64 IsWow64Process GetNativeSystemInfoWindows System32 SysWOW64

所以综上所述,Wow64是64bit的Windows系统里面的一个模拟器技术名字(32bitOS没有),它存在的意义是保证32bit的程式可以在64位Windows系统上正常运行。32位程式在32位Windows OS下运行、64位程式在64位Windows OS下运行、64位程式在ARM64位 Windows下运行。所以得出结论:当参数2值是false时,IsWow64Process这个方法并不能准确的判断出Windows OS的Bit。这个方式我比较建议使用,因为不管它对32和64位程式都是通用的。

qq_41077484的博客 1158

TPC好像是这么回事儿

TPC(Transmit Power Control)发送功率控制,本觉得就是控制一下发送功率,原理很简单,但看原版协议死活每搞懂什么意思,恼羞成怒!!!! 后来又看了一些贴子和cisco的相关功能介绍,再回头看协议,好像是这么一回事: 1、所谓TPC,是AP控制STA的发送功率的一种手段。在802.11d中,已定义了使用Country Element传递区域无线通信规定的信道和最大发送功率信息: 通过获取这些信息,STA可以确定自己应该遵守什么规则,可以用什么发送功率在哪些信道上通信。 2

两只勤劳的蜜蜂 8630

从ATE到ATPG:基于Scan Chain的芯片制造缺陷定位实战解析

本文深入解析了从ATE到ATPG的芯片制造缺陷定位实战技术,重点介绍了Scan Chain的工作原理、异步复位触发器处理技巧以及Design Compiler中的DFT实现方法。通过实际案例展示了如何利用ATE测试数据和ATPG工具进行精确的缺陷定位,并分享了提升测试覆盖率和优化测试成本的专业技巧,为芯片测试工程师提供了宝贵的实战经验。

weixin_42527160的博客 380

判断操作系统及指定进程是32位还是64位

判断操作系统及指定进程是32位还是64位

云满笔记 1645

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

32位dll转64位工具_实战经验:使用IsWow64Process识别当前系统是32位还是64位

问题有时候碰到一个需求:如何通过代码的方式,判断当前系统是32位还是64位的?直接上代码废话不多说,直接上代码,稍后进行解释。以上函数对当前系统是否为64位进行判断,因为当前所有系统只有32位和64位两种,所以,如果以上函数返回TRUE,则代表当前系统是64位的,反之,则是32位系统。原理解释第一段:函数首先对_WIN64宏进行判断,_WIN64是一个预定义宏,当编译目标平台为64位时,此宏会被定...

weixin_39951112的博客 1673

15、z/OS 优化配置与迁移实践

本文详细探讨了z/OS环境的优化配置与迁移实践,涵盖DASD存储库管理、用户目录更新、环境更新意义以及不同场景下的迁移案例。通过单笔记本系统和服务器级机器的实例,展示了迁移流程和关键要点,包括DASD文件创建、设备映射更新、系统重启初始化以及数据备份等步骤。文章还总结了迁移过程中的注意事项,并展望了未来z/OS优化的发展趋势,为z/OS系统的稳定运行和高效管理提供了实用指导。

zzz56的博客 129

假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection)

本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。

weixin_41964296的博客 1724

IsWow64Process函数理解的偏差

 IsWow64Process函数理解的偏差 搬运自我的百度空间 IsWow64Process并不像网上很多文章说的那样,可以直接判断进程的位数。其实他的实际含义是某个进程是不是在wow64虚拟环境下。 所以说各种可能的情况如下: 64-bit process on 64-bit Windows : FALSE 32-bit proc

myjisgreat的专栏 4269

Java的API帮助文档

JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。 JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。 JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。 官网下载: 1、登录Oracle官网(Oracl.

人生得意须尽欢 2万+

通过加载Kernel32来动态判断 当前操作系统32bit还是64bit

工作原理:通过加载Kernel32来获取IsWow64Process 函数然后通过函数的地址操作,执行函数的操作。 在程序中只要我们获取了一个函数的地址,就可以找到正确的方法执行这个函数。 但是这种方法并不是一种十分稳定的方式,因为我取到的函数在32bit和64bit操作系统中都存在 #include <windows.h> #include <tchar.h...

weixin_33709590的博客 173

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

如何判断操作系统是32位还是64位?

64位机器可以运行32/64位操作系统,而32位机器只能运行32位操作系统,这样就有一个问题,对于一个64位机器,如何判断操作系统究竟是32位还是64位呢?   总结了一下,基本方法如下:1.linux:#file /sbin/init/sbin/init: ELF ;32-bit; LSB executable, Intel 80386......2.hpux:#getconf KERNEL_B

展翅欲飞 2997

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

判断程序的运行环境是否是64位系统

1 /************************************************************************/ 2 /* 函数说明:用于判断程序的运行环境是否是64位系统 3 /* 参 数:无 4 ...

weixin_33910460的博客 100

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Win32 64位系统判断

BOOLIsWow64()  {      typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);      LPFN_ISWOW64PROCESS fnIsWow64Process;      BOOL bIsWow64 = FALSE;      fnIsWow64Process = (LPFN_ISWOW64PROCE

wzj_05的专栏 469

VC 判断系统是否64位

判断windows系统是否64位,可以通过 IsWow64Process 来判断。大多数网页对这个函数如何判断系统是否64位解释的不是很清楚。Google了某外文才搞明白 函数原型 BOOL WINAPI IsWow64Process(  _In_   HANDLE hProcess,  _Out_  PBOOL Wow64Process); 1.如果编译的是64位程序,在64位系统

u010784648的专栏 1527

Windows 获取指定PID进程的程序位数

1. 需求背景 在使用DLL注入时,进程需要获取目标进程的位数,来决定注入32位/64位的DLL 2. 实现原理 调用win32 APIIsWow64Process 3. 代码如下 #include <windows.h> #include <tchar.h> /* * 作者: shang_cm * 时间: 2019-10-09 * 函数功能: 获取指定PID进程的位...

冰糖葫芦的夏天的博客 1153

windows 64位操作系统判断及重定向Redirection 示例

typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; typedef BOOL (WINAPI *TWow64DisableWow64FsRedirection)(PVOID *); TWow64DisableWow64FsRedirecti

nsaygl的专栏 636

delphi 判断是64位系统还是32为操作系统

<br />需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。 所以使用该函数的时候最好用GetProcAddress 。 <br />function IsWin64: Boolean;   <br />var  <br />  Kernel32Handle: THandle;   <br />  IsWow64

kay_1010的专栏 5703

判定当前系统为32位还是64位版本

BOOL IsWow64() {     typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);     LPFN_ISWOW64PROCESS fnIsWow64Process;     BOOL bIsWow64 = FALSE;     fnIsWow64Process = (LPFN_ISWOW64PROCESS)G

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 582

判断是否为64位机

Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByV

Thorpe Tao的专栏 837

VC判断系统和进程是64位还是32位

/////////////////////////////////////////////////////////////////////////////////////// //判断操作系统是64位还是32位 //返回TRUE位64位,返回FALSE位32位 ////////////////////////////////////////////////////////

hzy694358的专栏 3253

C++ 判断当前系统是否是64位系统

判断当前系统是否是64位系统: 完! 测试成功!

MAC 应用开发 1674

判断系统是64位还是32位的正确方法

在很多网站上都贴有这种方法,可惜都无法区别32位或64位,本身思路是正确的,但是在实现的细节上使用错误: BOOL IsWow64() {     typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);     LPFN_ISWOW64PROCESS fnIsWow64Process;     BOOL bIsWow

386
上一篇: Brainfuck VM
下一篇: 还原GetModuleFileNameExW
vizee
博客等级 码龄16年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值