!locks (!kdext*.locks)

その !locks Kdextx86.dll および Kdexts.dll の拡張子には、カーネル ERESOURCE ロックに関する情報が表示されます。

この拡張機能のコマンドと混同しないでください、 !ntsdexts.locks 拡張機能のコマンド。

!locks [Options] [Address]

パラメーター

オプション 表示される情報の量を指定します。 次のオプションの任意の組み合わせを使用できます。

-v
各ロックに関する詳細情報を表示します。

-p
パフォーマンスの統計情報など、ロックに関する使用可能なすべての情報を表示します。

-d
すべてのロックに関する情報を表示します。 それ以外の場合、競合のあるロックのみが表示されます。)

Address
表示するリソースのロックの16進数のアドレスを指定します。 もし 住所 0 または省略すると、システム内のすべての ERESOURCE ロックに関する情報が表示されます。

DLL

Kdexts.dll

備考

その !locks 拡張機能は、スレッドによってリソースに対して保持されているすべてのロックを表示します。 ロックは共有または排他、つまり、他のスレッドはそのリソースにアクセスできません。 この情報は、システムでデッドロックが発生した場合に役立ちます。 デッドロックは、実行中のスレッドが必要とするリソースの排他ロックを保持している非実行スレッドによって発生します。

通常は、実行中のスレッドが必要とするリソースの排他ロックを保持している非実行スレッドを見つけることで、Microsoft Windows 2000のデッドロックを特定できます。 ほとんどのロックは共有されます。

これは基本的な例です !locks 出力:

kd> !locks
**** DUMP OF ALL RESOURCE OBJECTS ****
KD: Scanning for held locks......

Resource @ 0x80e97620    Shared 4 owning threads
     Threads: ff688da0-01<*> ff687da0-01<*> ff686da0-01<*> ff685da0-01<*> 
KD: Scanning for held locks.......................................................

Resource @ 0x80e23f38    Shared 1 owning threads
     Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
KD: Scanning for held locks.

Resource @ 0x80d8b0b0    Shared 1 owning threads
     Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
2263 total locks, 3 locks currently held

表示される各スレッドのアドレスの後には、そのスレッド数が続くことに注意してください(たとえば、"01")。 スレッドの後に"<*>"が続く場合、そのスレッドはロックの所有者の1つです。 場合によっては、最初のスレッドアドレスにオフセットが含まれています。 その場合は、実際のスレッドアドレスも表示されます。

これらのリソースオブジェクトのいずれかに関する詳細情報を検索する場合は、以降のコマンドの引数として"Resource@"に続くアドレスを使用します。 前の例に示されている 2 番目のリソースを調査するには、次のように使用できます dt ERESOURCE 80d8b0b0 or !thread 80ed0020. または、を使用することもできます !locks を使用して再度拡張します -v オプション:

kd> !locks -v 80d8b0b0

Resource @ 0x80d8b0b0    Shared 1 owning threads
     Threads: 80ed0023-01<*> *** Actual Thread 80ed0020

     THREAD 80ed0020  Cid 4.2c  Teb: 00000000 Win32Thread: 00000000 WAIT: (WrQueue) KernelMode Non-Alertable
         8055e100  Unknown
     Not impersonating
GetUlongFromAddress: unable to read from 00000000
     Owning Process 80ed5238
     WaitTime (ticks)          44294977
     Context Switch Count      147830             
     UserTime                  0:00:00.0000
     KernelTime                0:00:02.0143
     Start Address nt!ExpWorkerThread (0x80506aa2)
     Stack Init fafa4000 Current fafa3d18 Base fafa4000 Limit fafa1000 Call 0
     Priority 13 BasePriority 13 PriorityDecrement 0
ChildEBP RetAddr  
fafa3d30 804fe997 nt!KiSwapContext+0x25 (FPO: [EBP 0xfafa3d48] [0,0,4]) [D:\NT\base\ntos\ke\i386\ctxswap.asm @ 139]
fafa3d48 80506a17 nt!KiSwapThread+0x85 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\nt\base\ntos\ke\thredsup.c @ 1960]
fafa3d78 80506b36 nt!KeRemoveQueue+0x24c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\nt\base\ntos\ke\queueobj.c @ 542]
fafa3dac 805ad8bb nt!ExpWorkerThread+0xc6 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\nt\base\ntos\ex\worker.c @ 1130]
fafa3ddc 8050ec72 nt!PspSystemThreadStartup+0x2e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\nt\base\ntos\ps\create.c @ 2164]
00000000 00000000 nt!KiThreadStartup+0x16 [D:\NT\base\ntos\ke\i386\threadbg.asm @ 81]

1 total locks, 1 locks currently held