原文:http://blog.csdn.net/qq78442761/article/details/54646010

当我们写某些具有破坏性的程序时就需要对进程进行遍历和提取ID

对于上述功能,我们先介绍几个API

1.CreateToolhelp32Snapshout function

得到进程、模块或者线程的快照

语法如下:

  1. HANDLE WINAPI CreateToolhelp32Snapshot(
  2. _In_ DWORD dwFlags,
  3. _In_ DWORD th32ProcessID
  4. );

第一个参数:快照中包含了系统的一部分,参数如下:

我们这里用TH32CS_SNAPPROCESS

快照包含了系统里面的所有进程。

第二个是关于 PROCESSENTRY32结构体

语法如下:

  1. typedef struct tagPROCESSENTRY32 {
  2. DWORD     dwSize;
  3. DWORD     cntUsage;
  4. DWORD     th32ProcessID;
  5. ULONG_PTR th32DefaultHeapID;
  6. DWORD     th32ModuleID;
  7. DWORD     cntThreads;
  8. DWORD     th32ParentProcessID;
  9. LONG      pcPriClassBase;
  10. DWORD     dwFlags;
  11. TCHAR     szExeFile[MAX_PATH];
  12. } PROCESSENTRY32, *PPROCESSENTRY32;

这描述了一个入口,这个入口是当快照被调用时系统地址空间里面的进程被读取。

这里只介绍szExeFile[MAX_PATH]和

th32ParentProcessID:这是创建进程后的进程的标识(父进程)

szExeFile:进程里面可执行文件的名字

下面是源代码!部分函数没有讲解,但可以通过注释或者字面意思可以了解

  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <TlHelp32.h>
  4. int main()
  5. {
  6. HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  7. if (hProceessnap == INVALID_HANDLE_VALUE)
  8. {
  9. printf_s("创建进行快照失败\n");
  10. return -1;
  11. }
  12. else
  13. {
  14. PROCESSENTRY32 pe32;
  15. pe32.dwSize = sizeof(pe32);
  16. BOOL hProcess = Process32First(hProceessnap, &pe32);
  17. char buff[1024];
  18. while (hProcess)
  19. {
  20. wsprintf(buff, "进程名:%s--------------------进程ID:%d", pe32.szExeFile, pe32.th32ParentProcessID);
  21. printf_s("%s\n", buff);
  22. memset(buff, 0x00, 1024);
  23. hProcess = Process32Next(hProceessnap, &pe32);
  24. }
  25. }
  26. CloseHandle(hProceessnap);
  27. return 0;
  28. }

运行结果如下

 

最新文章

  1. ACM ICPC Vietnam National Second Round
  2. 关于flex中正则表达式上下文匹配的问题
  3. sqlserver中表变量和变量表之间区别
  4. ASP.NET Eval四种绑定方式
  5. 【BZOJ】【1150】【CTSC2007】数据备份Backup
  6. Kinetic使用注意点--collection
  7. 李洪强iOS开发之OC[018]对象和方法之间的关系
  8. 【HDU2222】Keywords Search(AC自动机)
  9. SDUT 2933-人活着系列Streetlights(最小生成树Kruskal+和理查德设置来实现)
  10. 漫画研发之十二:该听谁的? 部门经理 or 项目经理
  11. 用PhotoSwipe制作相册,手势可放大
  12. 基于MDK编程STM32程序无法使用,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”
  13. Centos7.0下将Python更新到Python2.7.13
  14. JavaScrpt笔记之第二天
  15. hdu 5952 连通子图
  16. HTTP 错误 500.19 Internal Server Error的解决方法
  17. UWP 手绘视频创作工具技术分享系列 - 有 AI 的手绘视频
  18. python 的zip 函数小例子
  19. Python3学习笔记18-访问限制
  20. double,失去精度

热门文章

  1. windows下vim中文乱码处理
  2. linux常见编辑命令
  3. 【脚本开发】:性能测试-Java虚拟用户实现下载脚本
  4. Maven 安装jar文件到本地repository
  5. Cinderella
  6. Bug解决方案:org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 8; 不允许有匹配 &quot;[xX][mM][lL]&quot; 的处理指令目标
  7. C 扩展库 - mysql API general outline
  8. java的文件操作类File
  9. memcached 学习笔记 3
  10. 转载:怎么用eclipse开发C++程序(以后备用,待实现),使用CDT