安全矩阵

 找回密码
 立即注册
搜索
查看: 2416|回复: 0

干货|Windows下进程操作的一些C++代码

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-8-12 09:46:45 | 显示全部楼层 |阅读模式
本帖最后由 Delina 于 2021-8-12 09:48 编辑

原文链接:干货|Windows下进程操作的一些C++代码

0x01 进程遍历因为进程是在随时进行变动的所以我们需要获取一张快照
1.1 CreateToolhelp32Snapshot
  1. HANDLE CreateToolhelp32Snapshot(
  2.   DWORD dwFlags,
  3.   DWORD th32ProcessID
  4. );
复制代码
因为要获取进程第一个参数选择TH32CS_SNAPPROCESS来获取系统中所有的进程,具体可以参考[CreateToolhelp32Snapshot]:https://docs.microsoft.com/zh-cn ... 26l%3DZH-CN%26k%3Dk(TLHELP32%252FCreateToolhelp32Snapshot);k(CreateToolhelp32Snapshot);k(DevLang-C%252B%252B);k(TargetOS-Windows)%26rd%3Dtrue
1.2 Process32First
  1. BOOL Process32First(
  2.   HANDLE           hSnapshot,
  3.   LPPROCESSENTRY32 lppe
  4. );
复制代码
第一个参数使用上面CreateToolhelp32Snapshot函数返回的句柄。第二个参数执行了PROCESSENTRY32结构的指针,它包含了进程信息。检索进程里的第一个进程信息。
1.2.1 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.   CHAR      szExeFile[MAX_PATH];
  12. } PROCESSENTRY32;
复制代码

使用时候要把结构体清零。szExeFile为进程名称,其他都根据名称一样。
1.3 Process32Next
  1. BOOL Process32Next(
  2.   HANDLE           hSnapshot,
  3.   LPPROCESSENTRY32 lppe
  4. );
复制代码
检索快照中的下一个进程信息。
  1. void ListProcess() {
  2.     HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  3.     PROCESSENTRY32 pe32 = { 0 };
  4.     pe32.dwSize = sizeof(PROCESSENTRY32);
  5.     BOOL bRet = Process32First(hSnap, &pe32);
  6.     while (bRet)
  7.     {
  8.         bRet = Process32Next(hSnap, &pe32);
  9.         printf(pe32.szExeFile);
  10.         pid = pe32.th32ProcessID;
  11.         wprintf(L"\r\n");
  12.         printf("pid:%d", pe32.th32ProcessID);
  13.         printf("\r\n-----------------------------------------");
  14.         wprintf(L"\r\n");
  15.     }
  16.     ::CloseHandle(hSnap);
  17. }
复制代码



0x02 模块遍历同理只需要将CreateToolhelp32Snapshot的dwFlags修改为TH32CS_SNAPMODULE,th32ProcessID参数为进程的pid,这里要先获取进程pid。
2.1 ??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 13:44 , Processed in 0.012675 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表