我需要列出當前進程中所有打開的句柄。 因爲我找不到像「EnumHandles」這樣的函數,所以我正在考慮將循環從0改爲1000.問題是我如何檢索每個句柄的名稱? 我使用c + +和操作系統是Win7的32位 編輯: 我需要的名稱是一個互斥體。 通過比較互斥的名字,我想把手ID 我似乎使用OpenMutex已經找到解決辦法,但我不知道怎麼傳第三個參數,獲取當前進程中所有句柄的名稱
回答
我相信你必須使用NTDLL.DLL。據我所知,這是所有工具監視進程,句柄和其他系統信息,最終必須在Windows下使用。我用它在一個小的Win32工具,但是從來不必列出句柄。
在這裏檢查一個很好的介紹該圖書館,並與您的問題。 http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html
另外在http://forum.sysinternals.com/enumerate-opened-files_topic3577.html
的第一篇文章的GetObjectName函數訪問這種在Windows中的信息似乎是一個大量的工作,看起來可怕,因爲微軟並不希望支持它,但你會看到當'easy'API沒有給你你需要的東西時,你必須挖掘到NTDLL。這就是ProcessExplorer最終使用的工具。使用起來並不難:加載DLL,使用正確的函數指針來填充你自己聲明的結構,並使用網上找到的結構。
我不是指導進程,它是位於當前進程中的句柄 – WePro2 2012-01-03 22:22:59
我嚴重地解釋了它。 NTDLL.DLL庫用於獲取有關深層系統信息(進程,句柄等)的信息。這是一個未經Microsoft記錄的DLL,但您可以在我提供的鏈接或通過Google搜索找到文檔。你只需要知道在DLL中調用的結構和函數。 – fury 2012-01-03 22:32:58
只是爲了檢索手柄的名稱,它看起來很多工作。我認爲OpenMutex可能是我正在尋找的答案,但我不確定是否需要傳遞互斥體(\ Sessions \ 1 \ BaseNamedObjects \ somemutex)的完整路徑,或者只是在第三個參數上傳遞somemutex。我嘗試了兩種方法,但沒有取得成功 – WePro2 2012-01-03 22:44:25
- 1. 如何獲取Windows中當前進程的所有子進程的句柄?
- 2. 通過圖像名稱獲取進程的進程句柄
- 3. 按進程名稱獲取進程句柄
- 4. 獲取所有窗口句柄和給定進程名稱的相應標籤句柄
- 5. 通過窗口句柄獲取未知進程的名稱?
- 6. 獲取VB.NET中PID進程的所有子窗口的句柄
- 7. 從pid或句柄獲取進程名稱
- 8. 如何獲取當前BrowserWindow的句柄
- 9. Win32API - 如何從進程句柄獲取進程的文件名?
- 10. 是否有可能通過進程名稱獲得WINAPI進程句柄,而無需遍歷所有進程
- 11. 通過名稱獲取控制句柄
- 12. 獲取進程主線程的句柄
- 13. Python Selenium獲取當前窗口句柄
- 14. 獲取當前課程的名稱?
- 15. 在Windows DLL中,如何獲取當前進程已打開的文件句柄?
- 16. 獲取進程表格的句柄c#
- 17. 獲取窗口的所有句柄
- 18. 獲取使用其圖像名稱的過程的句柄
- 19. 獲取當前正在執行的存儲過程的句柄
- 20. 如何獲取當前C程序的父窗口的句柄?
- 21. 獲取當前MembershipProvider名稱
- 22. 獲取獨佔進程句柄
- 23. 通過PID獲取進程句柄
- 24. 從瀏覽器進程獲取句柄
- 25. 如何確定進程句柄是否是當前進程?
- 26. 在當前進程中獲取JavaVM *的所有實例?
- 27. 如何獲取所有線程ID和進程的名稱
- 28. 如何獲得所有進程的打開句柄集
- 29. 如何獲取當前所有者名稱?
- 30. 獲取鼠標當前在VB.net中的窗體句柄
你是什麼意思的「每個句柄的名稱」?手柄沒有名字。你的意思是句柄ID,相應的窗口類或文本標題? – 2012-01-03 22:04:28
並非所有句柄都引用具有名稱的文件。你有沒有考慮過看Process Explorer? – 2012-01-03 22:05:04
該方法不起作用。什麼樣的手柄? – SLaks 2012-01-03 22:05:25