[WinApi]内存基本操作Review

简介:

Pnig0s1992:

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

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

 

 
  1. //Code by Pnig0s1992 
  2. //Date:2012,3,15 
  3. #include <stdio.h> 
  4. #include <Windows.h> 
  5. #include <TlHelp32.h> 
  6.  
  7. VOID getMemoryInfo(SYSTEM_INFO si,HANDLE hProcess); 
  8.  
  9. int main(void
  10.     SYSTEM_INFO si; 
  11.     MEMORYSTATUS ms; 
  12.     ms.dwLength = sizeof(ms); 
  13.     GetSystemInfo(&si); 
  14.     printf("\n当前内存页大小%uKB",si.dwPageSize/1024); 
  15.     printf("\n小于0x%x为系统保留区.",si.lpMinimumApplicationAddress); 
  16.     printf("\n大于0x%x为系统内核区.",si.lpMaximumApplicationAddress); 
  17.     printf("\nCPU数量:%u",si.dwNumberOfProcessors); 
  18.     GlobalMemoryStatus(&ms); 
  19.     printf("\n当前系统内存使用率:%u%%:",ms.dwMemoryLoad); 
  20.     printf("\n当前系统总物理内存:%uM",ms.dwTotalPhys/1024/1024); 
  21.     printf("\n当前系统可用物理内存:%uM",ms.dwAvailPhys/1024/1024); 
  22.     printf("\n当前系统总虚拟内存:%uM",ms.dwTotalVirtual/1024/1024); 
  23.     printf("\n当前系统可用虚拟内存:%uM",ms.dwAvailVirtual/1024/1024); 
  24.     printf("\n当前系统总页文件:%uM",ms.dwTotalPageFile/1024/1024); 
  25.     printf("\n当前系统可用页文件:%uM",ms.dwAvailPageFile/1024/1024); 
  26.     PROCESSENTRY32 pe32; 
  27.     pe32.dwSize = sizeof(pe32); 
  28.     HANDLE hProcessSnap; 
  29.     hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
  30.     if(hProcessSnap == INVALID_HANDLE_VALUE) 
  31.     { 
  32.         printf("\n获取进程快照失败"); 
  33.         return -1; 
  34.     }else 
  35.     { 
  36.         Process32First(hProcessSnap,&pe32); 
  37.         do  
  38.         { 
  39.             printf("\n当前进程名:%S PID:%u",pe32.szExeFile,pe32.th32ProcessID); 
  40.             if(pe32.th32ProcessID != GetCurrentProcessId()) 
  41.             { 
  42.                 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,pe32.th32ProcessID); 
  43.                 getMemoryInfo(si,hProcess); 
  44.             } 
  45.         } while (Process32Next(hProcessSnap,&pe32)); 
  46.     } 
  47.     system("pause"); 
  48.     return 0; 
  49.  
  50. VOID getMemoryInfo(SYSTEM_INFO si,HANDLE hProcess) 
  51.     printf("\n内存地址 保护属性 页面类型"); 
  52.     DWORD dwCurPos = (DWORD)si.lpMinimumApplicationAddress;//第一次查询位置为可访问的最小内存地址 
  53.     while(dwCurPos <(DWORD)si.lpMaximumApplicationAddress) //结束条件为最大内存地址 
  54.     { 
  55.         MEMORY_BASIC_INFORMATION mbi; 
  56.         DWORD dwRc = VirtualQueryEx(hProcess,(LPVOID)dwCurPos,&mbi,sizeof(mbi)); 
  57.         printf("\n0x%x %u %u",mbi.BaseAddress,mbi.AllocationProtect,mbi.Type); 
  58.         dwCurPos = (DWORD)mbi.BaseAddress+mbi.RegionSize;//当前块儿基址加块儿大小 
  59.     } 

 

 











本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/807029,如需转载请自行联系原作者

相关文章
|
5月前
|
人工智能 前端开发 算法
自由编程学习资源:free-programming-books
`free-programming-books` 是一个GitHub上的开源项目,旨在收集和整理免费的编程学习资源,涵盖了各种编程语言、框架、工具和范畴。这个项目的目标是为广大的学习者提供高质量、免费且易于获取的学习资料,促进技术知识的传播和共享。
275 2
自由编程学习资源:free-programming-books
|
6月前
|
测试技术 KVM 开发工具
【OS Pintos】Pintos 内核库基本数据结构 | 运行测试用例 alarm-multiple
【OS Pintos】Pintos 内核库基本数据结构 | 运行测试用例 alarm-multiple
75 0
编译原理 first集 follow集 实例 解析
编译原理 first集 follow集 实例 解析
98 0
编译原理 first集 follow集 实例 解析
|
C语言
ARM架构与编程(基于I.MX6ULL): 代码重定位(八)(下)
ARM架构与编程(基于I.MX6ULL): 代码重定位(八)
251 0
|
C语言 内存技术
ARM架构与编程(基于I.MX6ULL): 代码重定位(八)(上)
ARM架构与编程(基于I.MX6ULL): 代码重定位(八)
252 0
|
存储 数据库
SAP ABAP 写时拷贝(Copy on Write)策略的一个具体例子
SAP ABAP 写时拷贝(Copy on Write)策略的一个具体例子
85 0
SAP ABAP 写时拷贝(Copy on Write)策略的一个具体例子
|
区块链 C++ Windows
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
871 0
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
|
JSON Go 数据格式
go程序struct omitempty妙用
记录struct与json转换omitempty的妙用
406 0