!locks (!kdext*.locks)

L’extension !locks dans Kdextx86.dll et dans Kdexts.dll affiche des informations sur les verrous ERESOURCE du noyau.

Cette commande d’extension ne doit pas être confondue avec la commande d’extension !ntsdexts.locks.

!locks [Options] [Address]

Paramètres

Options Spécifie la quantité d’informations à afficher. Toute combinaison des options suivantes peut être utilisée :

-v
Affiche des informations détaillées sur chaque verrou.

-p
Affichez toutes les informations disponibles sur les verrous, y compris les statistiques de performances.

-d
Affichez des informations sur tous les verrous. Sinon, seuls les verrous de contention seront affichés.)

Adresse
Spécifie l’adresse hexadécimale du verrou ERESOURCE à afficher. Si Address est égal à 0 ou omis, des informations sur tous les verrous ERESOURCE du système s’affichent.

DLL

Kdexts.dll

Notes

L’extension !locks affiche tous les verrous conservés sur les ressources par des threads. Un verrou peut être partagé ou exclusif, auquel cas aucun autre thread ne peut avoir accès à cette ressource. Ces informations sont utiles lorsqu’un interblocage se produit sur un système. Un interblocage est dû à un thread qui n’est pas en cours d’exécution et qui contient un verrou exclusif sur une ressource requise par un thread en cours d’exécution.

Vous pouvez généralement identifier un interblocage dans Microsoft Windows 2000 en trouvant un thread qui n’est pas en cours d’exécution et qui contient un verrou exclusif sur une ressource requise par un thread en cours d’exécution. La plupart des verrous sont partagés.

Voici un exemple de sortie basique de !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

Remarquez que l’adresse de chaque thread affiché est suivie de son nombre de threads (par exemple, « -01 »). Si un thread est suivi de « <*> », ce thread est l’un des propriétaires du verrou. Dans certains cas, l’adresse de thread initiale est différente. Dans ce cas, l’adresse réelle du thread s’affiche également.

Si vous souhaitez trouver plus d’informations sur l’un de ces objets de ressource, utilisez l’adresse qui suit « Resource @ » comme argument dans les prochaines commandes. Pour examiner la deuxième ressource illustrée dans l’exemple précédent, vous pouvez utiliser dt ERESOURCE 80d8b0b0 ou !thread 80ed0020. Vous pouvez également utiliser l’extension !locks de nouveau avec l’option -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