!locks (!kdext*.locks)
Kdextx86.dll 和 Kdexts.dll 中的 !locks 擴充功能會顯示核心 ERESOURCE 鎖定的相關信息。
此擴充功能命令不應與 !ntsdexts.locks 擴充功能命令混淆。
!locks [Options] [Address]
參數
選項 指定要顯示的資訊量。 您可以使用下列選項的任何組合:
-v
顯示每個鎖定的詳細資訊。
-p
顯示鎖定的所有可用資訊,包括效能統計數據。
-d
顯示所有鎖定的相關信息。 否則,只會顯示具有爭用的鎖定。
位址
指定要顯示的ERESOURCE鎖定十六進位位址。 如果 Address 為 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”。 如果線程後面接著 「<*>」,該線程就是鎖定的其中一個擁有者。 在某些情況下,初始線程位址包含位移。 在此情況下,也會顯示實際的線程位址。
如果您想要尋找其中一個資源物件的詳細資訊,請使用後續 「Resource 」作為未來命令的自變數。 若要調查上述範例中顯示的第二個資源,您可以使用 dt ERESOURCE 80d8b0b0 或 !thread 80ed0020。 或者,您可以使用 -v 選項再次使用 !locks 擴充功能:
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