WinDBG的 !handle 命令可以讓你方便調試控制代碼(handle)。
查看進程內所有控制代碼, 輸入命令列
0:014> !handle
Handle 4
Type Directory
Handle 8
Type Process
Handle c
Type Key
Handle 10
Type Mutant
Handle 14
Type ALPC Port
Handle 18
Type Key
Handle 1c
Type Event
Handle 20
Type Key
... (省略)
Handle 7e0
Type Mutant
392 Handles
Type Count
None 17
Event 134
Section 47
File 35
Directory 3
Mutant 34
WindowStation 2
Semaphore 24
Key 47
Token 1
Process 3
Thread 27
Desktop 1
IoCompletion 4
Timer 5
Job 1
KeyedEvent 1
TpWorkerFactory 6
從WinDBG輸出結果我們可以看到所有控制代碼的類型和值,以及統計資訊(一共392個handle,其中有35個檔案控制代碼,47個註冊表控制代碼 .... )。
如果想查看某個控制代碼的詳細資料, 可以用命令:
0:014> !handle 0x5c8 f
Handle 5c8
Type Key
Attributes 0
GrantedAccess 0x20019:
ReadControl
QueryValue,EnumSubKey,Notify
HandleCount 2
PointerCount 3
Name /REGISTRY/USER/S-1-5-21-2127521184-1604012920-1887927527-2966534/Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts
Object Specific Information
Key last write time: 16:52:14. 5/20/2009
Key name FileExts
0x5c8 是控制代碼的值, 參數f 表示顯示全部資訊。 我們可以看到控制代碼0x5c8 是註冊表控制代碼,路徑為/REGISTRY/USER/S-1-5-21-2127521184-1604012920-1887927527-2966534/Software/Microsoft/Windows/CurrentVersion/Explorer/FileExts。
值得一提的是,WinDBG 還提供了!htrace 命令,可以很方便來用檢查控制代碼泄露(Handle Leak), 下次再寫篇blog 專門介紹 !htrace 。
>> 原創文章的著作權屬於作者,轉載請註明出處(http://blog.csdn.net/WinGeek/), 謝謝。 <<