【WINDOWS·编程】Windows平台判断系统是64位还是32位

开发某应用软件时,需要获取当前系统架构是x64还是x32。程序为32位应用程序,运行在Win10 64系统下,但是通过api函数GetSystemInfo获取的cpu架构为x86(32位),这显然是不正确的

因为Win32程序在Win64上运行需要借助WOW64,它是一个32位的仿真器,微软利用它,来让一个32位程序无缝的运行在64位系统上,在进程创建时,WOW64会为我们的32位进程设置环境变量如下:

【WINDOWS·编程】Windows平台判断系统是64位还是32位_第1张图片


WOW64 实现详细信息 - Win32 apps | Microsoft LearnWOW64 模拟器在用户模式下运行。https://learn.microsoft.com/zh-cn/windows/win32/winprog64/wow64-implementation-details?redirectedfrom=MSDN

由此可见在32位进程中,我们的进程环境变量中的PROCESSOR_ARCHITECTURE被设置为x86,所以我们使用GetSystemInfo的时候,会得到CPU架构x86


解决方案:就是使用GetNativeSystemInfo函数代替GetSystemInfo,这个函数会将有关当前系统的信息检索到在WOW64下运行的应用程序
代码如下:

​BOOL IsX64System() {
	SYSTEM_INFO si; 
	GetNativeSystemInfo(&si); 
	return si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
		si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ? true : false;
}

你可能感兴趣的:(Windows编程,c++,windows)