首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows 進程管理器實作:列舉進程、模組與執行緒

     編輯:關於C語言

功能概覽

實作類似工作管理員的工具,支援:

  • 列舉系統進程(PID、名稱、執行緒數等)。
  • 檢視進程載入的 DLL 模組。
  • 列舉進程執行緒。
  • 終止進程/執行緒。
  • 提權至 Debug 權限以存取系統進程。

介面截圖

核心 API 與程式碼結構

// 初始化進程列表 ListView
m_ListProcess.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_ListProcess.InsertColumn(0, _T("PID"), LVCFMT_LEFT, 80);
m_ListProcess.InsertColumn(1, _T("進程名稱"), LVCFMT_LEFT, 200);
// ...

// 列舉進程快照
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe32 = { sizeof(pe32) };
BOOL bRet = Process32First(hSnap, &pe32);
while (bRet) {
    // 填入 ListView
    bRet = Process32Next(hSnap, &pe32);
}

// 列舉模組
MODULEENTRY32 me32 = { sizeof(me32) };
HANDLE hModSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);
Module32First(hModSnap, &me32);
// ...

// 列舉執行緒
THREADENTRY32 te32 = { sizeof(te32) };
HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
Thread32First(hThreadSnap, &te32);
// 篩選 th32OwnerProcessID == dwPid

// 提權 Debug 權限
BOOL DebugPrivilege() {
    HANDLE hToken;
    OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
    TOKEN_PRIVILEGES tp = { 1, { { 0 } } };
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
}

下載地址:完整專案原始碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved