原文: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. }

运行结果如下

 

C/C++遍历进程和进程ID的小工具的更多相关文章

  1. 在Linux上显示正在运行的进程的线程ID

    在Linux上显示正在运行的进程的线程ID 在上Linux," ps -T"可以显示正在运行的进程的线程信息: # ps -T 2739 PID SPID TTY STAT TIM ...

  2. 进程控制函数(2)-setpgid() 修改当前进程的进程组ID

    定义:int setpgid(pid_t pid,pid_t pgid); 表头文件:#include<unistd.h> 说明:setpgid()将参数pid 指定进程所属的组识别码设为 ...

  3. pidof---查找指定名称的进程的进程号id号。

    pidof命令用于查找指定名称的进程的进程号id号. 语法 pidof(选项)(参数) 选项 -s:仅返回一个进程号: -c:仅显示具有相同“root”目录的进程: -x:显示由脚本开启的进程: -o ...

  4. 进程控制函数(1)-getpgid() getpgrp() 获取当前进程的进程组ID

    定义:pid_t getpid(void); 表头文件:#include<unistd.h> 说明:getpid()用来取得目前进程的进程识别码, 许多程序利用取到的此值来建立临时文件, ...

  5. C++ 实现 查找进程, 杀死进程, 启动进程, 进程重启

    头文件: #include <Windows.h>#include <tlhelp32.h>#include <tchar.h>#include <Shell ...

  6. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  7. linux进程及进程控制

    Linux进程控制   程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例.利用分时技术,在Linux操作系统上同时可以运行多个进程.分时技术的基本原理是把CPU的运行时间划 ...

  8. wait、waitpid 僵尸进程 孤儿进程

    man wait: NAME wait, waitpid, waitid - wait for process to change state SYNOPSIS #include <sys/ty ...

  9. Linux系统编程(8)—— 进程之进程控制函数fork

    fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先 ...

随机推荐

  1. 【性能测试】脚本开发,最普通的http协议脚本2

    Action() { lr_start_transaction("FM0075基金购买"); web_submit_data("ehouse_ehGetPwdRandom ...

  2. windows下python管理右键菜单

    实现很简单,不记得什么时候写的了,贴出来希望能有所价值 """ Windows中创建右键菜单 """ import os import sy ...

  3. 深入了解Looper、Handler、Message之间关系

    深入了解Looper.Handler.Message之间关系 前言及简介 上个星期我们整个项目组趁着小假期,驱车去了江门市的台山猛虎峡玩了两个多钟左右极限勇士全程漂流,感觉真得不错,夏天就应该多多玩水 ...

  4. mongodb启动失败:child process failed, exited with error number 100

    参考 http://www.dataguru.cn/thread-107361-1-1.html 里面的路径 根据自己的--dbpath的路径  和l--logpath路径去找

  5. linux系统挂载U盘,中文文件名乱码解决方案

    本人(壮壮熊)所用系统:ubuntu 12.4 今天在使用mount指令挂在硬盘时,出现令人头疼的中文文件名乱码. 问题: 使用mount /dev/sdb1 /media指令挂在第二颗硬盘的第一个分 ...

  6. 使用Java发送Http请求的内容

    公司要将自己的产品封装一个WebService平台,所以最近开始学习使用Java发送Http请求的内容.这一块之前用PHP的时候写的也比较多,从用最基本的Socket和使用第三方插件都用过. 学习了J ...

  7. mysql8.0关闭log-bin功能

    一.查看log-bin是否开启: mysql> show variables like 'log-bin'; 二.关闭log-bin: 在配置文件中的 [mysqld] 配置节中增加 skip- ...

  8. NetXray

    NetXRay是由Cinco Networks公司开发的一个用于高级分组检错的软件,功能很强大.IP地址查询工具. 硬件要求 对硬件要求低,可运行常用的windows平台. 主要功能 1.监视网络状态 ...

  9. ASP.NET MVC Core的ViewComponent

    MVC Core新增了ViewComponent的概念,直接强行理解为视图组件,用于在页面上显示可重用的内容,这部分内容包括逻辑和展示内容,而且定义为组件那么其必定是可以独立存在并且是高度可重用的. ...

  10. OC weak strong __weak __strong copy retain assign nonatomic atomic等关键字的总结

    weak和strong的区别: weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它. 一旦最后一个strong型指针离去 ...