!locks (!xt*.locks)
L'estensione !locks in Kdextx86.dll e Kdexts.dll visualizza informazioni sui blocchi ERESOURCE del kernel.
Questo comando di estensione non deve essere confuso con il comando di estensione !ntsdexts.locks.
!locks [Options] [Address]
Parametri
Opzioni Specifica la quantità di informazioni da visualizzare. È possibile usare qualsiasi combinazione delle opzioni seguenti:
-v
Visualizza informazioni dettagliate su ogni blocco.
-p
Visualizzare tutte le informazioni disponibili sui blocchi, incluse le statistiche sulle prestazioni.
-d
Visualizza informazioni su tutti i blocchi. In caso contrario, vengono visualizzati solo i blocchi con conflitti.
Indirizzo
Specifica l'indirizzo esadecimale del blocco ERESOURCE da visualizzare. Se Address è 0 o omesso, verranno visualizzate informazioni su tutti i blocchi ERESOURCE nel sistema.
DLL
Kdexts.dll
Osservazioni:
L'estensione !locks visualizza tutti i blocchi contenuti nelle risorse dai thread. Un blocco può essere condiviso o esclusivo, il che significa che nessun altro thread può ottenere l'accesso a tale risorsa. Queste informazioni sono utili quando si verifica un deadlock in un sistema. Un deadlock è causato da un thread non in esecuzione che contiene un blocco esclusivo su una risorsa necessaria per il thread in esecuzione.
In genere è possibile individuare un deadlock in Microsoft Windows 2000 individuando un thread non in esecuzione che contiene un blocco esclusivo su una risorsa richiesta da un thread in esecuzione. La maggior parte dei blocchi è condivisa.
Di seguito è riportato un esempio dell'output !locks di base:
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
Si noti che l'indirizzo per ogni thread visualizzato è seguito dal numero di thread (ad esempio, "-01"). Se un thread è seguito da "<*>", tale thread è uno dei proprietari del blocco. In alcuni casi, l'indirizzo del thread iniziale contiene un offset. In tal caso, viene visualizzato anche l'indirizzo del thread effettivo.
Per trovare altre informazioni su uno di questi oggetti risorsa, usare l'indirizzo che segue "Resource @" come argomento per i comandi futuri. Per esaminare la seconda risorsa illustrata nell'esempio precedente, è possibile usare dt ERESOURCE 80d8b0b0 o !thread 80ed0020. In alternativa, è possibile usare di nuovo l'estensione !locks con l'opzione -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