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

// 初始化進程列表 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);
}
下載地址:完整專案原始碼