鱼C论坛

 找回密码
 立即注册
查看: 2663|回复: 4

[技术交流] GetSystemInfo 获取系统信息

[复制链接]
发表于 2016-9-18 20:09:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 无符号整形 于 2016-9-18 21:17 编辑

这个函数可以获取系统信息,如果程序运行在WOW64上请调用GetNativeSystemInfo函数
好了废话不多说,给出原型:
void WINAPI GetSystemInfo(
  _Out_ LPSYSTEM_INFO lpSystemInfo
);

lpSystemInfo:一个指向SYSTEM_INFO的指针,用于获取信息。

嘿嘿微软又在绕圈圈,给出SYSTEM_INFO的成员列表:
typedef struct _SYSTEM_INFO {
  union {
    DWORD  dwOemId;
    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 保留

一个小栗子(从百度百科转的 ),送给大家~
#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;
}
                                    

评分

参与人数 1荣誉 +8 鱼币 +8 贡献 +5 收起 理由
拈花小仙 + 8 + 8 + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-18 21:59:48 | 显示全部楼层
@狂潮丶 @小甲鱼 @machimilk @阴影中的曙光

支持windows api短例 只用最简短的代码,做最有趣的实现`
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-18 23:27:19 | 显示全部楼层
支持一下,日积月累
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-19 17:20:11 | 显示全部楼层
这个很有意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-4 21:40:56 | 显示全部楼层
好牛逼。。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表