Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.87 KB | None | 0 0
  1. #include <windows.h>
  2. #include <tlhelp32.h>
  3. #include <stdio.h>
  4. #include <tchar.h>
  5.  
  6. BOOL GetProcessList();
  7. BOOL ListProcessModules(DWORD PID);
  8. BOOL ListProcessThreads(DWORD OwnerPID); //Parent PID
  9.  
  10. int main()
  11. {
  12.     GetProcessList();
  13.     system("pause");
  14.     return 0;
  15. }
  16.  
  17. BOOL GetProcessList()
  18. {
  19.     HANDLE Process_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //дискриптор
  20.  
  21.     //Cоздается снапшот процессов, модулей ...
  22.     //Cнапшот чего именно мы хотим получить | параметр dwProcessId задает идентификатор процесса, для которого создается снапшот.
  23.     //Возвращается хэндл снапшота
  24.  
  25.     if (Process_Snap == INVALID_HANDLE_VALUE)
  26.     {
  27.         return(FALSE);
  28.     }
  29.  
  30.     HANDLE Process;
  31.  
  32.     PROCESSENTRY32 P_E_32; // список процессов
  33.     P_E_32.dwSize = sizeof(PROCESSENTRY32);
  34.  
  35.     DWORD Class_of_Priority;
  36.  
  37.     if (!Process32First(Process_Snap, &P_E_32))
  38.     {
  39.         CloseHandle(Process_Snap);
  40.         return(FALSE);
  41.     }
  42.     //Process32First принимает хэндл, полученный от CreateToolhelp32Snapshot,
  43.     //вызванной с dwFlags = TH32CS_SNAPPROCESS, а также указатель на структуру PROCESSENTRY32.
  44.     //Перед вызовом процедуры поле dwSize этой структуры должно быть установлено в sizeof(PROCESSENTRY32).
  45.     //В случае успеха возвращается TRUE, а в peProcessEntry записывается информация о первом процессе
  46.  
  47.     do
  48.     {
  49.         printf("\nPROCESS NAME:  %s", P_E_32.szExeFile);
  50.  
  51.         Class_of_Priority = 0;
  52.         Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, P_E_32.th32ProcessID);
  53.         Class_of_Priority = GetPriorityClass(Process);
  54.         CloseHandle(Process);
  55.  
  56.         printf("\nProcess ID = 0x%08X", P_E_32.th32ProcessID);
  57.         printf("\nThread count = %d", P_E_32.cntThreads);
  58.         printf("\nParent process ID = 0x%08X", P_E_32.th32ParentProcessID);
  59.         printf("\nPriority base = %d", P_E_32.pcPriClassBase);
  60.         printf("\n");
  61.  
  62.         ListProcessModules(P_E_32.th32ProcessID);
  63.         ListProcessThreads(P_E_32.th32ProcessID);
  64.  
  65.     } while (Process32Next(Process_Snap, &P_E_32));
  66.  
  67.     CloseHandle(Process_Snap);
  68.     return(TRUE);
  69. }
  70.  
  71. BOOL ListProcessModules(DWORD PID)
  72. {
  73.     HANDLE Module_Snap = INVALID_HANDLE_VALUE;
  74.     MODULEENTRY32 M_E_32; //перечисляет модули в заданном процессе
  75.  
  76.     Module_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
  77.  
  78.     if (Module_Snap == INVALID_HANDLE_VALUE)
  79.     {
  80.         return(FALSE);
  81.     }
  82.  
  83.     M_E_32.dwSize = sizeof(MODULEENTRY32);
  84.  
  85.     if (!Module32First(Module_Snap, &M_E_32))
  86.     {
  87.         CloseHandle(Module_Snap);
  88.         return(FALSE);
  89.     }
  90.  
  91.     do
  92.     {
  93.         printf("\n\nMODULE NAME: %s", M_E_32.szModule);
  94.         printf("\nProcess ID = 0x%08X", M_E_32.th32ProcessID);
  95.         printf("\nBase Size = %d", M_E_32.modBaseSize);
  96.         printf("\nPath = %s", M_E_32.szExePath);
  97.         printf("\n");
  98.  
  99.     } while (Module32Next(Module_Snap, &M_E_32));
  100.  
  101.     CloseHandle(Module_Snap);
  102.     return(TRUE);
  103. }
  104.  
  105. BOOL ListProcessThreads(DWORD OwnerPID)
  106. {
  107.     HANDLE Thread_Snap = INVALID_HANDLE_VALUE;
  108.     THREADENTRY32 T_E_32; //перечисляет потоки в заданном процессе
  109.  
  110.     Thread_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
  111.     if (Thread_Snap == INVALID_HANDLE_VALUE)
  112.     {
  113.         return(FALSE);
  114.     }
  115.  
  116.     T_E_32.dwSize = sizeof(THREADENTRY32);
  117.  
  118.     if (!Thread32First(Thread_Snap, &T_E_32))
  119.     {
  120.         CloseHandle(Thread_Snap);
  121.         return(FALSE);
  122.     }
  123.  
  124.     do
  125.     {
  126.         if (T_E_32.th32OwnerProcessID == OwnerPID)
  127.         {
  128.             printf("\n\nTHREAD ID = 0x%08X", T_E_32.th32ThreadID);
  129.             printf("\nBase Priority = %d", T_E_32.tpBasePri);
  130.             printf("\nDelta Priority = %d", T_E_32.tpDeltaPri);
  131.             printf("\n");
  132.         }
  133.     } while (Thread32Next(Thread_Snap, &T_E_32));
  134.  
  135.     CloseHandle(Thread_Snap);
  136.     return(TRUE);
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement