52创业知识分享网

分享花呗|白条相关的小知识及使用技巧

学会了吗(实战经验:使用IsWow64Process识别当前系统是32位还是64位)

花白达人    2022-11-10    236

问题 有时候碰到一个需求:如何通过代码的方式,判断当前系统是32位还是64位的? 直接上代码 废话不

问题

有时候碰到一个需求:如何通过代码的方式,判断当前系统是32位还是64位的?

直接上代码

废话不多说,直接上代码,稍后进行解释。

以上函数对当前系统是否为64位进行判断,因为当前所有系统只有32位和64位两种,所以,如果以上函数返回TRUE,则代表当前系统是64位的,反之,则是32位系统。

原理解释

第一段:

函数首先对_WIN64宏进行判断,_WIN64是一个预定义宏,当编译目标平台为64位时,此宏会被定义。如果此代码运行并且_WIN64被定义,则意味着运行此代码的进程是一个64位进程,在Windows系统上,一个64位进程仅能在64位操作系统上运行,故如果在当前编译环境下_WIN64宏被定义,则此函数返回TRUE。

第二段:

当代码进入第二段,表明了运行此代码的进程是一个32位进程。代码的第二段首先尝试从kernel32.dll中获取IsWow64Process函数的地址,如果获取失败,表示当前系统的kernel32.dll中并没有IsWow64Process这一函数,表明当前系统为32位系统。如果函数获取成功,则调用IsWow64Process函数。

MSDN解释

下面我们看看MSDN上关于IsWow64Process函数的解释:

Determines whether the specified process is running under WOW64.

这里的WOW64是Windows上提供的一种机制,用来在64位系统上运行32位进程。具体解释如下:

WOW64 is the x86 emulator that allows 32-bit Windows-based applications to run seamlessly on 64-bit Windows. This allows for 32-bit (x86) Windows applications to run seamlessly in 64-bit (x64) Windows, as well as for 32-bit (x86) and 32-bit (ARM) Windows applications to run seamlessly in 64-bit (ARM64) Windows. WOW64 is provided with the operating system and does not have to be explicitly enabled.

我们在具体看一下这个函数的第二个参数的描述:

Wow64Process [out]

A pointer to a value that is set to TRUE if the process is running under WOW64. If the process is running under 32-bit Windows, the value is set to FALSE. If the process is a 64-bit application running under 64-bit Windows, the value is also set to FALSE.

如果当前进程运行在WOW64,意味着当前进程是一个32位进程并运行在支持WOW64的64位系统上,则此参数设置为TRUE。

如果当前进程运行在32位系统上,则此参数设置为FALSE,也即当前系统是32位系统,不是64位系统。

如果当前进程是一个64位进程并运行在64位系统下,则此参数设置为FALSE,也即当前系统是64位系统。

所以,通过IsWow64Process函数,我们基本可以确认当前运行的系统的位数了。

另外,如果IsWow64Process获取成功但是调用失败,这里仅仅弹出一个错误对话框。标准做法是调用GetLastError来获取错误原因并记录错误日志,这里就不再展开了。

总结

历史的车轮不断往前,桌面环境中的64位系统也将慢慢的取代32位,某一天,以上的代码,也随着时代的前进而变得毫无意义了,有时候想想,也是很凄凉的一件事儿。

本文链接:https://www.yangzhibaike.com/post/6727.html

声明:本站文章来自网络,版权归原作者所有!

上一篇  下一篇

相关文章

请发表您的评论