GetSystemInfo函数将用于检索与主机相关的值:
VOID GetSystemInfo(LPSYSTEM_INFO psinf); typedef struct _SYSTEM_INFO { union { DWORD dwOemId; // 已作废 struct { WORD wProcessorArchitecture; // Windows2K,处理器结构 WORD wReserved; // 保留将来使用 }; }; DWORD dwPageSize; // 页面大小 - 4K(x86) LPVOID lpMinimumApplicationAddress; // 每个进程可用空间的最小内存地址 LPVOID lpMaximumApplicationAddress; // 每个进程可用空间的最大内存地址 DWORD_PTR dwActiveProcessorMask; // 指明哪个CPU是活动的 DWORD dwNumberOfProcessors; // CPU数目 DWORD dwProcessorType; // Windows2K,处理器的类型 DWORD dwAllocationGranularity; // 分配力度 - 64K WORD wProcessorLevel; // Windows2K,细分处理器结构 WORD wProcessorRevision; // Windows2K,细分处理器级别 } SYSTEM_INFO, *LPSYSTEM_INFO;
Windows函数GlobalMemoryStatus可用于检索关于当前内存状态的动态信息:
VOID GlobalMemoryStatus(LPMEMORYSTATUS pmst); typedef struct _MEMORYSTATUS { DWORD dwLength; DWORD dwMemoryLoad; // 内存管理系统的大致繁忙程度,无大用 SIZE_T dwTotalPhys; // 物理储存器的总字节数 - RAM SIZE_T dwAvailPhys; // 可供分配的物理存储器的总字节数 SIZE_T dwTotalPageFile; // 硬盘上的页文件中包含的最大字节数 SIZE_T dwAvailPageFile; // 系统可用的页文件字节数 SIZE_T dwTotalVirtual; // 每个进程的地址空间中私有的总字节数 SIZE_T dwAvailVirtual; // 该进程的地址空间中所有空闲区域相加 } MEMORYSTATUS, *LPMEMORYSTATUS;
如果希望应用程序在内存大于4GB的计算机上运行,或者合计交换文件的大小大于4GB,那么可以使用新的GlobalMemoryStatusEx函数:BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX pmst);
Windows提供了一个函数,可以用来查询地址空间中内存地址的某些信息(如大小,存储器类型和保护属性等)。这个函数称为VirtualQuery:
DWORD VirtualQuery( LPCVOID pvAddress, PMEMORY_BASIC_INFORMATION pmbi, DWORD dwLength);
Windows还提供了另一个函数,它使一个进程能够查询另一个进程的内存信息:
DWORD VirtualQueryEx( HANDLE hProcess, LPCVOID pvAddress, PMEMORY_BASIC_INFORMATION pmbi, DWORD dwLength);