GetSystemInfo 获取系统信息
本帖最后由 无符号整形 于 2016-9-18 21:17 编辑这个函数可以获取系统信息,如果程序运行在WOW64上请调用GetNativeSystemInfo函数
好了废话不多说,给出原型:
void WINAPI GetSystemInfo(
_Out_ LPSYSTEM_INFO lpSystemInfo
);
lpSystemInfo:一个指向SYSTEM_INFO的指针,用于获取信息。
嘿嘿微软又在绕圈圈,给出SYSTEM_INFO的成员列表:
typedef struct _SYSTEM_INFO {
union {
DWORDdwOemId;
struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO;
dwOemls:为了保留兼容性的过时成员,应用程序应该使用wProcessorArchitecture成员。
wProcessorArchitecture:作系统的处理器体系结构,此成员可以是下列值之一。
值 含义
PROCESSOR_ARCHITECTURE_AMD64
9 64位(AMD或者英特尔)
PROCESSOR_ARCHITECTURE_ARM
5 ARM
PROCESSOR_ARCHITECTURE_IA64
6 英特尔(基于Itanium)
PROCESSOR_ARCHITECTURE_INTEL
0 x86
PROCESSOR_ARCHITECTURE_UNKNOWN
65535 未知体系
wReserved:此成员保留为未来使用。
dwPageSize:页面大小,这是VirtualAlloc函数使用的页面大小。
lpMinimumApplicationAddress :指向一个指针应用程序和动态链接库可以访问的最低内存地址。
lpMaximumApplicationAddress :指向一个指针应用程序和动态链接库可以访问的最高的内存地址。
dwActiveProcessorMask:系统中的处理器的一组掩码。(二进制的位)第0位是处理器0的掩码,第1位是处理器1的掩码,以此类推,第31位是处理器31的掩码。
dwNumberOfProcessors:当前组中的逻辑处理器的数量(如果你的电脑不是NUMA架构的值的话就是逻辑处理器数量)如果需要检索该值,请调用GetLogicalProcessorInformation函数。
注意:实际上这个并不是物理处理器数量。大家都听说过英特尔的超线程技术吧?他能把少一点的CPU虚拟成更多的CPU!!如果要获得虚拟CPU共享的物理CPU请调用GetLogicalProcessorInformationEx函数。
dwProcessorType:为了保留兼容性的过时成员,应用程序应使用wProcessorArchitecture, wProcessorLevel和wProcessorRevision成员获取CPU类型。
可能有以下值。
PROCESSOR_INTEL_386 (386)
PROCESSOR_INTEL_486 (486)
PROCESSOR_INTEL_PENTIUM (586)
PROCESSOR_INTEL_IA64 (2200)
PROCESSOR_AMD_X8664 (8664)
PROCESSOR_ARM (保留)
dwAllocationGranularity:可以分配内存空间(虚拟内存)起始地址的粒度。
wProcessorLevel:系统体系结构所依赖的处理器级别。它只用于显示,如果要想确定一个处理器的功能,请使用IsProcessorFeaturePresent函数。
如果wProcessorArchitecture是PROCESSOR_ARCHITECTURE_INTEL,则wProcessorLevel由CPU厂商定义。
如果wProcessorArchitecture是PROCESSOR_ARCHITECTURE_IA64,则wProcessorLevel为1。
wProcessorRevision:系统体系结构所依赖的处理器修订版本号。
值 含义
Intel Pentium, Cyrix, or NextGen 586 高位字节是型号,低位字节是步进值。比如,一个xxyy的值,型号和步进值可以显示为:Model xx,Stepping yy
Intel 386或者486 值的是形式xxyz
如果xx等于0xff(255),y~0xA是型号,z是步进的标识符。
如果xx不等于0xff,xx+'A'是步进标识符,yz是次要的步进标识符。
ARM 保留
一个小栗子(从百度百科转的{:10_259:} ),送给大家~
#include <windows.h>
#include <stdio.h>
int main()
{
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
cout <<setw(20) << "处理器掩码: " << systemInfo.dwActiveProcessorMask << endl
<<setw(20) << "处理器个数: " << systemInfo.dwNumberOfProcessors << endl
<<setw(20) << "处理器分页大小: " << systemInfo.dwPageSize << endl
<<setw(20) << "处理器类型: " << systemInfo.dwProcessorType << endl
<<setw(20) << "最大寻址单元: " << systemInfo.lpMaximumApplicationAddress << endl
<<setw(20) << "最小寻址单元: " << systemInfo.lpMinimumApplicationAddress << endl
<<setw(20) << "处理器等级: " << systemInfo.wProcessorLevel << endl
<<setw(20) << "处理器版本: " << systemInfo.wProcessorRevision << endl;
return 0;
} @狂潮丶 @小甲鱼 @machimilk @阴影中的曙光
支持windows api短例 只用最简短的代码,做最有趣的实现` 支持一下,日积月累 这个很有意义 好牛逼。。。。。。。。。。。。。。
页:
[1]