一、系统信息
a) 函数(检索主机相关信息):VOID GetSystemInfo(LPSYSTEM_INFO psinf);
b) SYSTEM_INFO结构 成员说明:
n dwPageSize; // CPU页面大小,x86 = 4KB;Alpha、IA_64 = 8KB
n lpMinimumApplicationAddress; // 每个进程可用地址空间的最小内存地址。Win98 = 4MB(下面4MB不能用),Win2000 = 64KB(开头64KB总是空闲)
n lpMaximumApplicationAddress; // ……最大内存地址,Win98 = 2GB(共享内存映射文件区域和OS代码包含在上面的2GB分区中,共4GB);Win2000是内核方式内存地址开始的地址(< 64KB)
n dwAllocationGranularity; // 分配粒度,所有Windows平台均为64k
n dwActiveProcessorMask; // 标识哪个CPU是活动的
n dwNumberOfProcessors; // CPU数目
n dwProcessorType; // CPU类型
n dwProcessorArchitecture; // CPU结构,如:Intel、Alpha、Intel64位
n wProcessorLevel; // 进一步细分CPU结构,如:Pentium Pro, PentiumII
n wProcessorRevision; //进一步细分CPU级别
n dwOemId; // 已经作废,不引用
n dwReserved;// 保留未用
二、虚拟内存的状态
a) 函数:VOID GlobalMemoryStatus(LPMEMORYSTATUS pmst);
b) MEMORYSTATUS结构 成员说明:
n dwLength; // 表示结构大小(用sizeof赋值),用于版本检查
n dwMemoryLoad; // 内存管理系统的繁忙程度,用处不大
n dwTotalPhys; // 物理存储器(EAM)总字节数(注意:如为128MB的内存条,为133667056 B(比128MB少540672 B),系统在引导过程中,保留一些内存为非页面内存,也不能被内核使用。
n dwAvailPhys; // 可供分配的EAM总字节数
n dwTotalPageFile; // 页文件包含的最大字节数,但系统可以扩大或压缩
n dwAvailPageFile; // 未提交给任何进程的页文件字节数。
n dwTotalVirtual; // 每个进程的地址空间中私有的总字节数(比2GB少128KB,因为,0x000000000~0x0000FFFF和0x7FFF0000~0x7FFFFFFF两个分区是不能访问的地址空间,=128KB)。
n dwAvailVirtual; // 空闲地址空间 = 进程地址空间中所有空闲区域相加
c) 函数:VOID GlobalMemoryStatusEx(LPMEMORYSTATUSEX pmst); // 在大于4GB内存的计算机上运行此函数。
三、确定地址空间的状态
a) 查询地址空间中内存地址的信息(大小、存储器类型、保护属性)的函数:
DWORD VirtualQuery(LPCVOID pvAddress,
PMEMORY_BASIC_INFORMATION pmbi, DWORD dwLength);
b) 查询其它进程的内存信息:
DWORD VirtualQueryEx(HANDLE hProcess, LPCVOID pvAddress,
PMEMORY_BASIC_INFORMATION pmbi, DWROD dwLength);
c) MEMORY_BASIC_INFORMATION结构 成员说明:
n BaseAddress:与pvAddress参数值相同,但四舍五入为页面的边界值。
n AllocationBase:包含在pvAddress中设定的地址区域的基地址。
n AllocationProtect: 一个地址空间区域被初次保留(分配)时的保护属性。
n RegionSize:所有页面大小(字节数),与含有用pvAddress参数设定的地址的页面有相同的保护属性、状态、类型。
n State:所有相邻页面的状态(MEM_* FREE、RESERVE、COMMIT),与含有用pvAddress参数设定的地址的页面有相同的保护属性、状态、类型。如果是FREE,则AllocationBase、AllocationProtect、Protect、Type成员均未定义;如果是RESERVE,则Protect未定义。
n Protect:所有相邻页面的保护属性(PAGE_*),与含有用pvAddress参数设定的地址的页面有相同的保护属性、状态、类型。
n Type:指明支持所有相邻页面的物理存储器的类型(MEM_* IMAGE、MAPPED、PRIVATE),与含有用pvAddress参数设定的地址的页面有相同的保护属性、状态、类型。如果是Win98,则为MEM_PRIVATE