windows核心编程 第14章,虚拟内存:获取系统信息

windows核心编程 第14章,虚拟内存:获取系统信息

14,获取系统消息


14.1 系统信息

许多操作系统的值是根据主机而定的,比如页面的大小,分配粒度的大小等。这些值决不应该用硬编码的形式放入你的源代码。相反,你始终都应该在进程初始化的时候检索这些值并在你的源代码中使用检索到的值。GetSystemInfo函数将用于检索与主机相关的值:

VOID  GetSystemInfo(LPSYSTEM_INFO psinf):

必须传递SYSTEM_INFO结构的地址给这个函数。这个函数将初始化所有的结构成员然后返回。下面是SYSTEM INFO数据结构的样子

typedef struct _SYSTEM_INFO {
   
    union {
   
        DWORD dwOemId;          // Obsolete field...do not use
        struct {
   
            WORD wProcessorArchitecture;
            WORD wReserved;
        } DUMMYSTRUCTNAME;
    } DUMMYUNIONNAME;
    DWORD dwPageSize;
    LPVOID lpMinimumApplicationAddress;
    LPVOID lpMaximumApplicationAddress;
    DWORD_PTR dwActiveProcessorMask;
    DWORD dwNumberOfProcessors;
    DWORD dwProcessorType;
    DWORD dwAllocationGranularity;
    WORD wProcessorLevel;
    WORD wProcessorRevision;
} SYSTEM_INFO, * LPSYSTEM_INFO;

当系统引导时,它要确定这些成员的值是什么。对于任何既定的系统来说,这些值总是相同的,因此决不需要为任何既定的进程多次调用该函数。由于有了GetSystemInfo函数,因此应用程序能够在运行的时候查询这些值。在该结构的所有成员中,只有4个成员与内存有关。表14-1对这4个成员作了描述。

/******************************************************************************
14_SysInfo.cpp 
显示SYSTEM_INFO结构体信息
******************************************************************************/


#include "CmnHdr.h"     /* See Appendix A. */
#include <windowsx.h>
#include <tchar.h>
#include <stdio.h>
#include "Resource.h"
#include <StrSafe.h>



///
//将数据转换为字符,并用逗号分开
PTSTR BigNumToString(LONG lNum, PTSTR szBuf, DWORD chBufSize);
void ShowCPUInfo(HWND hWnd, WORD wProcessorArchitecture, WORD wProcessorLevel,
    WORD wProcessorRevision);//显示CPU信息
void ShowBitness(HWND hWnd);//显示对话框标题
BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam);
void Dlg_OnCommand(HWND hWnd, int id, HWND hWndCtl, UINT codeNotify);
INT_PTR WINAPI Dlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
///

int WINAPI _tWinMain(HINSTANCE hInstExe, HINSTANCE, PTSTR, int) {
   

    DialogBox(hInstExe, MAKEINTRESOURCE(IDD_SYSINFO), NULL, Dlg_Proc);
    return(0);
}

INT_PTR WINAPI Dlg_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
   

    switch (uMsg) {
   
        chHANDLE_DLGMSG(hDlg, WM_INITDIALOG, Dlg_OnInitDialog);
        chHANDLE_DLGMSG(hDlg, WM_COMMAND, Dlg_OnCommand);
    }
    return(FALSE);
}

BOOL Dlg_OnInitDialog(HWND hWnd, HWND hWndFocus, LPARAM lParam) {
   

    chSETDLGICONS(hWnd, IDI_SYSINFO);

    //获取系统信息
    SYSTEM_INFO sinf;
    GetSystemInfo(&sinf);

    //显示CPU信息
    ShowCPUInfo(hWnd, sinf.wProcessorArchitecture,
        sinf.wProcessorLevel, sinf.wProcessorRevision);

    //显示页面大小
    TCHAR szBuf[50
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值