!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)
Adresse
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