2012-01-03 166 views
6

我需要列出當前進程中所有打開的句柄。 因爲我找不到像「EnumHandles」這樣的函數,所以我正在考慮將循環從0改爲1000.問題是我如何檢索每個句柄的名稱? 我使用c + +和操作系統是Win7的32位 編輯: 我需要的名稱是一個互斥體。 通過比較互斥的名字,我想把手ID 我似乎使用OpenMutex已經找到解決辦法,但我不知道怎麼傳第三個參數,獲取當前進程中所有句柄的名稱

+2

你是什麼意思的「每個句柄的名稱」?手柄沒有名字。你的意思是句柄ID,相應的窗口類或文本標題? – 2012-01-03 22:04:28

+0

並非所有句柄都引用具有名稱的文件。你有沒有考慮過看Process Explorer? – 2012-01-03 22:05:04

+0

該方法不起作用。什麼樣的手柄? – SLaks 2012-01-03 22:05:25

回答

5

我相信你必須使用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,使用正確的函數指針來填充你自己聲明的結構,並使用網上找到的結構。

+0

我不是指導進程,它是位於當前進程中的句柄 – WePro2 2012-01-03 22:22:59

+0

我嚴重地解釋了它。 NTDLL.DLL庫用於獲取有關深層系統信息(進程,句柄等)的信息。這是一個未經Microsoft記錄的DLL,但您可以在我提供的鏈接或通過Google搜索找到文檔。你只需要知道在DLL中調用的結構和函數。 – fury 2012-01-03 22:32:58

+0

只是爲了檢索手柄的名稱,它看起來很多工作。我認爲OpenMutex可能是我正在尋找的答案,但我不確定是否需要傳遞互斥體(\ Sessions \ 1 \ BaseNamedObjects \ somemutex)的完整路徑,或者只是在第三個參數上傳遞somemutex。我嘗試了兩種方法,但沒有取得成功 – WePro2 2012-01-03 22:44:25

相關問題