zoukankan      html  css  js  c++  java
  • 014 进程遍历

    进程遍历 
      ● 枚举
        ○ Windows API
        ○ 数据库 -> 注册表来访问 -> RegQuery函数来获取
        ○ ToolHelp库
          ○ 兼容性比较好
          ○ WIndows 95 就存在
        ○ Process Startus库 EnumProcess 函数 PSAPI.DLL
      ● Tool Help Reference
        ○ Tool Help Structures
          ○ 结构体
          ○ HEAPENTRY32

     1 typedef struct tagHEAPENTRY32 {
     2   SIZE_T    dwSize;            //结构体大小
     3   HANDLE    hHandle;           //堆块句柄
     4   ULONG_PTR dwAddress;          //堆块开始的地址
     5   SIZE_T    dwBlockSize;        //堆块的大小
     6   DWORD     dwFlags;          //标志位
     7   DWORD     dwLockCount;        //不再被使用的 总是设置为0
     8   DWORD     dwResvd;          //保留位不再被使用
     9   DWORD     th32ProcessID;      //使用堆的进程的标识符。
    10   ULONG_PTR th32HeapID;        //堆标识符。这不是句柄,只对工具帮助函数有意义。
    11 } HEAPENTRY32, *PHEAPENTRY32;

    dwFlags

    ValueMeaning
    LF32_FIXED

    固定的内存块,不可移动位置

    LF32_FREE

    没有被使用的内存块

    LF32_MOVEABLE

    可移动的内存块,可移动位置


          ○ HEAPLIST32 堆

    1 typedef struct tagHEAPLIST32 {
    2   SIZE_T    dwSize;          //结构体大小
    3   DWORD     th32ProcessID;      //进程标识符
    4   ULONG_PTR th32HeapID;        //堆标识符
    5   DWORD     dwFlags;          //标志位
    6 } HEAPLIST32, *PHEAPLIST32;

    dwFlags

    ValueMeaning
    HF32_DEFAULT

    进程默认堆


          ○ MODULEENTRY32 模块 任何一个进程都是由多个模块

     1 typedef struct tagMODULEENTRY32 {
     2   DWORD   dwSize;                        //结构体大小
     3   DWORD   th32ModuleID;                    //这个成员不再被使用,并且总是被设置为1。
     4   DWORD   th32ProcessID;                   //模块的进程的标识符
     5   DWORD   GlblcntUsage;                   //模块的负载计数,通常不太有意义,通常等于0xFFFF。
     6   DWORD   ProccntUsage;                   //模块的负载计数,通常不太有意义,通常等于0xFFFF。
     7   BYTE    *modBaseAddr;                   //模块的基本地址在拥有过程的上下文中。
     8   DWORD   modBaseSize;                   //模块大小
     9   HMODULE hModule;                     //在拥有过程的上下文中对模块的句柄。
    10   TCHAR   szModule[MAX_MODULE_NAME32 + 1];       //模块名字
    11   TCHAR   szExePath[MAX_PATH];              //模块地址
    12 } MODULEENTRY32, *PMODULEENTRY32;

          ○ PROCESSENTYR32 进程

     1 typedef struct tagPROCESSENTRY32 {
     2   DWORD     dwSize;              //结构体大小
     3   DWORD     cntUsage;             //这个成员不再使用,并且总是被设置为0。
     4   DWORD     th32ProcessID;          //进程标识符
     5   ULONG_PTR th32DefaultHeapID;        //这个成员不再使用,并且总是被设置为0.
     6   DWORD     th32ModuleID;           //这个成员不再使用,并且总是被设置为0.
     7   DWORD     cntThreads;            //进程启动,执行的线程数
     8   DWORD     th32ParentProcessID;      //创建这个过程的过程的标识符(它的父进程)。
     9   LONG      pcPriClassBase;         //这个过程创建的任何线程的基本优先级。
    10   DWORD     dwFlags;              //这个成员不再使用,并且总是被设置为零。
    11   TCHAR     szExeFile[MAX_PATH];      //进程的可执行文件的名称。要检索可执行文件的完整路径
    12 } PROCESSENTRY32, *PPROCESSENTRY32;


          ○ THREADENTRY32 线程

    1 typedef struct tagTHREADENTRY32 {
    2   DWORD dwSize;              //结构体大小
    3   DWORD cntUsage;             //这个成员不再使用,并且总是被设置为零。
    4   DWORD th32ThreadID;          //线程标识符
    5   DWORD th32OwnerProcessID;      //创建线程的进程的标识符。
    6   LONG  tpBasePri;           //线程优先级 0最小 31最大
    7   LONG  tpDeltaPri;          //这个成员不再使用,并且总是被设置为零。
    8   DWORD dwFlags;            //这个成员不再使用,并且总是被设置为零。
    9 } THREADENTRY32, *PTHREADENTRY32;


      ● Tool Help Function
        ○ CreateToolhelp32Snapshot          //创建当前进程快照
        ○ Heap32First                //检索由进程分配的堆的第一个块的信息。
        ○ Heap32ListFirst              //检索由指定进程分配的第一个堆的信息。
        ○ Heap32ListNext              //检索由进程分配的下一堆的信息。
        ○ Heap32Next                //检索一个进程分配的下一个堆的信息。
        ○ Module32First                //检索有关进程的第一个模块的信息。
        ○ Module32Next              //检索与进程或线程相关的下一个模块的信息。
        ○ Process32First              //检索系统快照中遇到的第一个进程的信息。
        ○ Process32Next              //检索系统快照中记录的下一个进程的信息。
        ○ Thread32First              //检索系统快照中记录的第一个线程信息
        ○ Thread32Next              //检索系统快照中记录的下一个线程信息
        ○ Toolhelp32ReadProcessMemory     //将分配给另一个进程的内存复制到应用程序提供的缓冲区。


      ● Process32First function

     1 #include <windows.h>
     2 #include <tlhelp32.h>
     3 #include <tchar.h>
     4 #include <stdio.h>
     5 
     6 int main( void )
     7 {    
     8     //创建系统快照
     9     HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    10     if( hProcessSnap == INVALID_HANDLE_VALUE )
    11     {
    12         printf("创建系统快照错误代码:%d", GetLastError());
    13     }
    14     PROCESSENTRY32 pe32 = {0};
    15     pe32.dwSize = sizeof(PROCESSENTRY32);
    16     if(!Process32First(hProcessSnap, &pe32))
    17     {
    18         DWORD dwError = GetLastError();
    19         if(dwError == ERROR_NO_MORE_FILES)
    20         {
    21             //没有任何快照信息
    22         }
    23     }
    24     
    25     do
    26     {
    27         _tprintf(TEXT("PID:%d	"), pe32.th32ProcessID);
    28         _tprintf(TEXT("File:%s
    "),pe32.szExeFile);
    29         if(!_tcscmp(TEXT("QQ.exe"), pe32.szExeFile))
    30         {
    31             HANDLE hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
    32             if(hModuleSnap == INVALID_HANDLE_VALUE)
    33             {
    34             }
    35             MODULEENTRY32 me32 = {0};
    36             me32.dwSize = sizeof(MODULEENTRY32);
    37             /*
    38             if(Module32First(hModuleSnap.&me32))
    39             {
    40             }
    41             */
    42             do
    43             {
    44                 _tprintf(TEXT("Module Name:%s	"), me32.szModule);
    45                 _tprintf(TEXT("Module Base: 0x%x	"),me32.modBaseAddr);
    46                 _tprintf(TEXT("Module Path:%s
    "),me32.szExePath);
    47             }
    48             while(Module32Next(hModuleSnap,&me32));
    49             CloseHandle(hModuleSnap);
    50         }
    51     }while (Process32Next(hProcessSnap,&pe32));
    52     CloseHandle(hProcessSnap);
    53    return 0;
    54 }
  • 相关阅读:
    11.29
    11.28
    11.24
    11.21
    11.17
    11.15
    11.14
    11.9
    11.5
    11.3
  • 原文地址:https://www.cnblogs.com/sdk123/p/6984173.html
Copyright © 2011-2022 走看看