探索虛擬記憶體
1得到系統資訊
GetsystemInfo(LPSYSTEM_INFO os);
typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId; // Obsolete field...do not use
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, *LPSYSTEM_INFO;
2 虛擬記憶體狀態
VOID
WINAPI
GlobalMemoryStatus(
__out LPMEMORYSTATUS lpBuffer
);
typedef struct _MEMORYSTATUS {
DWORD dwLength; // 在使用前必須用結構體大小來初始化
DWORD dwMemoryLoad; 記憶體使用量百分率
SIZE_T dwTotalPhys; 實體記憶體總量
SIZE_T dwAvailPhys; 還剩餘實體記憶體總量
SIZE_T dwTotalPageFile; 分頁檔總量,包括虛擬記憶體和實體記憶體
SIZE_T dwAvailPageFile; 頁面剩餘量
SIZE_T dwTotalVirtual; 虛擬記憶體總量
SIZE_T dwAvailVirtual; 剩餘虛擬記憶體量
} MEMORYSTATUS, *LPMEMORYSTATUS;
GetProcessMemoryInfo得到進程的資訊 PROCESS_MEMORY_COUNTERS_EX pmc = { sizeof(PROCESS_MEMORY_COUNTERS_EX) };
GetProcessMemoryInfo(GetCurrentProcess(), (PPROCESS_MEMORY_COUNTERS)&pmc, sizeof(pmc));
struct _PROCESS_MEMORY_COUNTERS_EX {
DWORD cb; 必須初始化為結構體大小
DWORD PageFaultCount; 分頁錯誤
SIZE_T PeakWorkingSetSize; 高峰工作集
SIZE_T WorkingSetSize; 工作集
SIZE_T QuotaPeakPagedPoolUsage; 高峰頁面池
SIZE_T QuotaPagedPoolUsage; 頁面緩衝池
SIZE_T QuotaPeakNonPagedPoolUsage; 高峰非頁面緩衝池
SIZE_T QuotaNonPagedPoolUsage; 非頁面緩衝池
SIZE_T PagefileUsage; 分頁檔大小
SIZE_T PeakPagefileUsage; 高峰分頁檔大小
SIZE_T PrivateUsage; 私人資料
} PROCESS_MEMORY_COUNTERS_EX;確定地址空間中的狀態
VirtualQuery
The VirtualQuery function provides information about a range of pages in the virtual address space of the calling process.這個函數為調用進程提供指定地區的虛擬記憶體資訊