!htrace
その !htrace 拡張機能は、1 つまたは複数のハンドルのスタック トレース情報を表示します。
ユーザーモードの構文
!htrace [Handle [Max_Traces]]
!htrace -enable [Max_Traces]
!htrace -snapshot
!htrace -diff
!htrace -disable
!htrace -?
カーネルモード構文
!htrace [Handle [Process [Max_Traces]]]
!htrace -?
パラメーター
Handle スタックトレースが表示されるハンドルを指定します。 Handle が 0 または省略された場合、プロセス内のすべてのハンドルのスタック トレースが表示されます。
プロセス (カーネルモードのみ) ハンドルが表示されるプロセスを指定します。 プロセス が 0 または省略された場合は、現在のプロセスが使用されます。 ユーザーモードでは、現在のプロセスが常に使用されます。
Max_Traces 表示するスタック トレースの最大数を指定します。 ユーザーモードでこのパラメータを省略すると、対象プロセスのすべてのスタックトレースが表示されます。
-有効にする (ユーザー モードのみ) ハンドル トレースを有効にし、ハンドル情報の最初のスナップショットを取得し、ハンドル情報の初期状態として使用します -diff オプション。
-snapshot (ユーザー モードのみ) 現在のハンドル情報のスナップショットを作成し、初期状態として使用します -差分 オプション。
-diff (ユーザー モードのみ) 現在のハンドル情報と、最後に取得されたハンドル情報のスナップショットを比較します。 まだ開いているハンドルをすべて表示します。
-無効化します (ユーザー モードのみ) ハンドル トレースを無効にします。
-?
この拡張機能の簡単なヘルプ テキストをデバッガ コマンド ウィンドウに表示します。
DLL
Windows XP以降
Kdexts.dll Ntsdexts.dll
追加情報
特定のハンドルに関する詳細情報を表示するには、 !handle 拡張子を使用します。
ハンドルの詳細については、を参照してください Microsoft Windows の内部機能 によるマーク・ルシノビッチとデヴィッド・ソロモン。
解説
!htrace を使用するには、ハンドル トレースを有効にする必要があります。 ハンドル トレースを有効にする 1 つの方法は、 !htrace -enable コマンドを入力することです。 ハンドル トレースが有効な場合、プロセスがハンドルを開いたり、ハンドルを閉じたり、無効なハンドルを参照したりするたびに、スタック トレース情報が保存されます。 !htrace が表示するのは、このスタック トレース情報です。
注記 ターゲット プロセスの Application Verifier をアクティブ化し、 ハンドル オプション。
!htrace によって報告されるトレースの一部は、異なるプロセス コンテキストからのものである可能性があります。 この場合、戻りアドレスが現在のプロセス コンテキストで適切に解決されないか、間違ったシンボルに解決される可能性があります。
次の例では、プロセス 0x81400300 のすべてのハンドルに関する情報を表示します。
kd> !htrace 0 81400300
Process 0x81400300
ObjectTable 0xE10CCF60
##
Handle 0x7CC - CLOSE:
0x8018FCB9: ntoskrnl!ExDestroyHandle+0x103
0x801E1D12: ntoskrnl!ObpCloseHandleTableEntry+0xE4
0x801E1DD9: ntoskrnl!ObpCloseHandle+0x85
0x801E1EDD: ntoskrnl!NtClose+0x19
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7CC - OPEN:
0x8018F44A: ntoskrnl!ExCreateHandle+0x94
0x801E3390: ntoskrnl!ObpCreateUnnamedHandle+0x10C
0x801E7317: ntoskrnl!ObInsertObject+0xC3
0x77DE23B2: KERNEL32!CreateSemaphoreA+0x66
0x010011C5: badhandle!main+0x45
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7DC - BAD REFERENCE:
0x8018F709: ntoskrnl!ExMapHandleToPointerEx+0xEA
0x801E10F2: ntoskrnl!ObReferenceObjectByHandle+0x12C
0x801902BE: ntoskrnl!NtSetEvent+0x6C
0x80154965: ntoskrnl!_KiSystemService+0xC4
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7DC - CLOSE:
0x8018FCB9: ntoskrnl!ExDestroyHandle+0x103
0x801E1D12: ntoskrnl!ObpCloseHandleTableEntry+0xE4
0x801E1DD9: ntoskrnl!ObpCloseHandle+0x85
0x801E1EDD: ntoskrnl!NtClose+0x19
0x010012C1: badhandle!mainCRTStartup+0xE3
## 0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
Handle 0x7DC - OPEN:
0x8018F44A: ntoskrnl!ExCreateHandle+0x94
0x801E3390: ntoskrnl!ObpCreateUnnamedHandle+0x10C
0x801E7317: ntoskrnl!ObInsertObject+0xC3
0x77DE265C: KERNEL32!CreateEventA+0x66
0x010011A0: badhandle!main+0x20
0x010012C1: badhandle!mainCRTStartup+0xE3
0x77DE0B2F: KERNEL32!BaseProcessStart+0x3D
##
Parsed 0x6 stack traces.
Dumped 0x5 stack traces.