是否有可能在任何給定的時間獲取當前進程在win32上的線程句柄列表(在C++中)?如何從win32進程獲取線程句柄列表?
3
A
回答
8
你會發現this article很有幫助。它給出了使用tool help library附帶的小細微差別的線程枚舉代碼。
爲了方便起見(從製品提起):
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
int __cdecl main(int argc, char **argv)
{
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE) {
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(h, &te)) {
do {
if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) +
sizeof(te.th32OwnerProcessID)) {
printf("Process 0x%04x Thread 0x%04x\n",
te.th32OwnerProcessID, te.th32ThreadID);
}
te.dwSize = sizeof(te);
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}
return 0;
}
3
+1
要知道,返回的OpenThread備用HANDLE,而不是原來的手柄。除了與原始句柄進行比較外,它對所有內容都很有用。當你完成這個備用手柄時,不要忘記關閉手柄。 – 2014-04-02 17:18:25
相關問題
- 1. 獲取進程主線程的句柄
- 2. 從MemoryMappedFile獲取Win32句柄
- 3. Win32API - 如何從進程句柄獲取進程的文件名?
- 4. 如何從進程ID獲取進程句柄?
- 5. 從瀏覽器進程獲取句柄
- 6. 獲取進程表格的句柄c#
- 7. Perl - Win32 - 如何從另一個進程無阻塞地讀取文件句柄?
- 8. 獲取獨佔進程句柄
- 9. 通過PID獲取進程句柄
- 10. 從進程得到句柄
- 11. 如何獲取Win32線程的名稱?
- 12. 獲取正在運行的進程給定的進程句柄
- 13. 按進程名稱獲取進程句柄
- 14. 如何用PHP獲取Apache請求線程句柄號?
- 15. 如何獲取本地COM服務器的進程句柄?
- 16. 如何獲取Windows中當前進程的所有子進程的句柄?
- 17. 從pid或句柄獲取進程名稱
- 18. 線程ID與線程句柄
- 19. 句柄如何與線程相關?
- 20. Win32進程如何獲取父進程的PID?
- 21. 從進程ID獲取進程名稱(win32)
- 22. 如何從pbobject句柄獲取IPBX_NonVisualObject?
- 23. 如何獲取畫筆的句柄,Win32 C++
- 24. 如何使用win32 API獲取鏈接標籤的句柄
- 25. ç句柄#獲取列表,AcessViolationException
- 26. 如何獲取CACHED進程列表?
- 27. lldbinit中的進程句柄
- 28. Qt句柄進程終止
- 29. 從DataGridViewTextBoxCell獲取句柄IntPtr?
- 30. 從句柄中獲取ContextMenu?
不幸的是,這可以讓您訪問線程的ID,而不是請求者詢問的HANDLE。似乎沒有任何API可以從ID獲取HANDLE。 ID上的OpenThread返回一個備用HANDLE。 – 2014-04-02 17:16:58