Welcome

首页 / 软件开发 / C++ / 调用WinApi查询内存信息

调用WinApi查询内存信息2013-11-27Pnig0s1992:

列出当前系统信息,当前系统内存状况。

枚举进程,列出每个进程所有内存块的页面类型,页面属性,保护属性等信息

//Code by Pnig0s1992 //Date:2012,3,15 #include <stdio.h> #include <Windows.h> #include <TlHelp32.h>VOID getMemoryInfo(SYSTEM_INFO si,HANDLE hProcess);int main(void) { SYSTEM_INFO si; MEMORYSTATUS ms; ms.dwLength = sizeof(ms); GetSystemInfo(&si); printf("
当前内存页大小%uKB",si.dwPageSize/1024); printf("
小于0x%x为系统保留区.",si.lpMinimumApplicationAddress); printf("
大于0x%x为系统内核区.",si.lpMaximumApplicationAddress); printf("
CPU数量:%u",si.dwNumberOfProcessors); GlobalMemoryStatus(&ms); printf("
当前系统内存使用率:%u%%:",ms.dwMemoryLoad); printf("
当前系统总物理内存:%uM",ms.dwTotalPhys/1024/1024); printf("
当前系统可用物理内存:%uM",ms.dwAvailPhys/1024/1024); printf("
当前系统总虚拟内存:%uM",ms.dwTotalVirtual/1024/1024); printf("
当前系统可用虚拟内存:%uM",ms.dwAvailVirtual/1024/1024); printf("
当前系统总页文件:%uM",ms.dwTotalPageFile/1024/1024); printf("
当前系统可用页文件:%uM",ms.dwAvailPageFile/1024/1024); PROCESSENTRY32 pe32; pe32.dwSize = sizeof(pe32); HANDLE hProcessSnap; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap == INVALID_HANDLE_VALUE) { printf("
获取进程快照失败"); return -1; }else{ Process32First(hProcessSnap,&pe32); do{ printf("
当前进程名:%S PID:%u",pe32.szExeFile,pe32.th32ProcessID); if(pe32.th32ProcessID != GetCurrentProcessId()) { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pe32.th32ProcessID); getMemoryInfo(si,hProcess); } } while (Process32Next(hProcessSnap,&pe32)); } system("pause"); return 0; }VOID getMemoryInfo(SYSTEM_INFO si,HANDLE hProcess) { printf("
内存地址 保护属性 页面类型"); DWORD dwCurPos = (DWORD)si.lpMinimumApplicationAddress;//第一次查询位置为可访问的最小内存地址 while(dwCurPos <(DWORD)si.lpMaximumApplicationAddress) //结束条件为最大内存地址 { MEMORY_BASIC_INFORMATION mbi; DWORD dwRc = VirtualQueryEx(hProcess,(LPVOID)dwCurPos,&mbi,sizeof(mbi)); printf("
0x%x %u %u",mbi.BaseAddress,mbi.AllocationProtect,mbi.Type); dwCurPos = (DWORD)mbi.BaseAddress+mbi.RegionSize;//当前块儿基址加块儿大小 } }
本文出自 “About:Blank H4cking” 博客,请务必保留此出处http://pnig0s1992.blog.51cto.com/393390/807029