!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