注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

SYSTEM_INFO结构  

2014-07-22 20:28:18|  分类: Windows编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

该结构包含了当前操作系统的一些信息,包括系统架构、处理器类型、处理器数目、页面大小和其他的一些信息。

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;
该结构比较复杂,因为还包含了一个联合体,该联合体又可以理解为一个DWORD,或者两个WORD类型。分别介绍如下:
dwOemId:已经过时,主要是为了保持兼容性,应该使用下述两个值。
wProcessorArchitecture:处理器的架构,可能的值见下表:
常量 含义
PROCESSOR_ARCHITECTURE_AMD64 9 X64 (AMD 或Intel)
PROCESSOR_ARCHITECTURE_ARM 5 ARM
PROCESSOR_ARCHITECTURE_IA64 6 基于Intel Itanium
PROCESSOR_ARCHITECTURE_INTEL 0 X86
PROCESSOR_ARCHITECTURE_UNKNOWN 0xffff 未知的

wReserved:保留供以后使用。
dwPageSize:分页大小,指定页面的大小和页面保护和委托的颗粒。这是被 VirtualAlloc 函数使用的页大小。lpMinimumApplicationAddress:指向应用程序和动态链接库(DLL)可以访问的最低内存地址。
lpMaximumApplicationAddress:指向应用程序和动态链接库(DLL)可以访问的最高内存地址。
dwActiveProcessorMask:指定一个用来代表这个系统中装配了的中央处理器的掩码。二进制0位是处理器0;31位是处理器31。
dwNumberOfProcessors:指定系统中的处理器的数目。
dwProcessorType:Windows 95:
指定系统中中央处理器的类型。
Windows NT:
这个成员已经不再有用了,但是为了向Windows 95和以前版本的Windows NT保持兼容,使用wProcessorArchitecture, wProcessorLevel, 和 wProcessorRevision 三个成员定义处理器的类型。
对于Windows 95指定系统中中央处理器的类型,对于Windows NT这个成员已经不再有用了,但是为了向Windows 95和以前版本的Windows NT保持兼容,使用wProcessorArchitecture, wProcessorLevel, 和wProcessorRevision 三个成员定义处理器的类型。
这个成员的值是下面中的一个:
PROCESSOR_INTEL_386
PROCESSOR_INTEL_486
PROCESSOR_INTEL_PENTIUM
只适用于Windows NT: PROCESSOR_MIPS_R4000、PROCESSOR_ALPHA_21064。
dwAllocationGranularity:指定已经被分配的虚拟内存空间的粒度。
wProcessorLevel:Windows 95中不使用这个成员,而Windows NT用于指定系统体系结构依赖的处理器级别。
wProcessorRevision:Windows 95不使用这个成员,Windows NT指定系统体系结构依赖的处理器修订版本号。下表显示了对于每一种处理器体系,处理器的修订版本号是如何构成的。

处理器
Intel Pentium,Cyrix,NextGen 586 xxyy的形式,xx是型号,yy是步进值
Intel 80386或 80486

xxyz的形式。如果xx等于0xFF,y-0xA 是型号,z 是步进表示符,如果xx不等于0xFF,'A'是步进表示符,yz 是次要步进表示符

ARM 保留

在实际使用的时候,可以使用GetSystemInfo函数去获取系统的一些信息,该函数原型如下:

void WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
所提供的SYSTEM_INFO结构体带出了所获取的结果。测试代码如下:
#include <stdio.h>
#include <Windows.h>

void TestSystemInfo()
{
    SYSTEM_INFO si;
    GetSystemInfo(&si);
    printf("Hardware information: \n");  
    printf("Processor Architecture: %u\t", si.wProcessorArchitecture);
    switch(si.wProcessorArchitecture)
    {
    case PROCESSOR_ARCHITECTURE_AMD64:printf("X64\n");break;
    case PROCESSOR_ARCHITECTURE_ARM:printf("ARM\n");break;
    case PROCESSOR_ARCHITECTURE_IA64:printf("Intel Itanium based\n");break;
    case PROCESSOR_ARCHITECTURE_INTEL:printf("X86\n");break;
    case PROCESSOR_ARCHITECTURE_UNKNOWN:printf("Unknown\n");break;
    }
    printf("Page size: %u\n", si.dwPageSize); 
    printf("Minimum application address: %lX\n",si.lpMinimumApplicationAddress); 
    printf("Maximum application address: %lX\n",si.lpMaximumApplicationAddress); 
    printf("Active processor mask: %u\n", si.dwActiveProcessorMask); 

    printf("Number of processors: %u\n", si.dwNumberOfProcessors); 
    printf("Processor type: %u\t", si.dwProcessorType);
    switch (si.dwProcessorType)
    {
    case PROCESSOR_INTEL_386:printf("I386\n");break;
    case PROCESSOR_INTEL_486:printf("I486\n");break;
    case PROCESSOR_INTEL_PENTIUM:printf("PENTIUM\n");break;
    case PROCESSOR_MIPS_R4000:printf("MIPS R4000\n");break;
    }
    printf("Allocation Granularity: %u\n", si.dwAllocationGranularity);
    printf("Processor Level: %u\n", si.wProcessorLevel);
}
本人电脑运行效果如下:
CX_0722_202638
  评论这张
 
阅读(557)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016