!locks (!kdext*.locks)

Die Erweiterung !locks in Kdextx86.dll und Kdexts.dll zeigt Informationen über Kernel-ERESOURCE-Sperren an.

Dieser Erweiterungsbefehl sollte nicht mit dem Erweiterungsbefehl !ntsdexts.locks verwechselt werden.

!locks [Options] [Address]

Parameter

Options Gibt an, wie viele Informationen angezeigt werden sollen. Jede Kombination der folgenden Optionen kann verwendet werden:

-v
Zeigt detaillierte Informationen zu jeder Sperre an.

-p
Anzeige aller verfügbaren Informationen über die Sperren, einschließlich Leistungsstatistiken.

-d
Informationen über alle Sperren anzeigen. Andernfalls werden nur Sperren mit Konkurrenz angezeigt)

Address
Gibt die hexadezimale Adresse der anzuzeigenden ERESOURCE-Sperre an. Wenn Address 0 ist oder ausgelassen wird, werden Informationen über alle ERESOURCE-Sperren im System angezeigt.

DLL

Kdexts.dll

Hinweise

Die Erweiterung !locks zeigt alle von Threads gehaltenen Sperren auf Ressourcen an. Eine Sperre kann gemeinsam oder exklusiv sein, was bedeutet, dass keine anderen Threads Zugriff auf diese Ressource erhalten können. Diese Informationen sind nützlich, wenn es in einem System zu einer Blockade kommt. Ein Deadlock wird dadurch verursacht, dass ein nicht ausführender Thread eine exklusive Sperre für eine Ressource hält, die der ausführende Thread benötigt.

In der Regel können Sie einen Deadlock in Microsoft Windows 2000 lokalisieren, indem Sie einen nicht ausführenden Thread finden, der eine exklusive Sperre für eine Ressource hält, die von einem ausführenden Thread benötigt wird. Die meisten Sperren werden gemeinsam genutzt.

Hier ist ein Beispiel für die grundlegende Ausgabe !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

Beachten Sie, dass der Adresse für jeden angezeigten Thread die Anzahl der Threads folgt (z. B. „-01“). Wenn ein Thread von „<*>“ gefolgt wird, ist dieser Thread einer der Besitzer der Sperre. In einigen Fällen enthält die anfängliche Thread-Adresse einen Offset. In diesem Fall wird auch die aktuelle Adresse des Threads angezeigt.

Wenn Sie weitere Informationen über eines dieser Ressourcenobjekte suchen, verwenden Sie die Adresse, die auf „Ressource @“ folgt, als Argument für zukünftige Befehle. Um die zweite Ressource aus dem vorangegangenen Beispiel zu untersuchen, könnten Sie dt ERESOURCE 80d8b0b0 oder !thread 80ed0020 verwenden. Oder Sie können die Erweiterung !locks wieder mit der Option -v verwenden:

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