!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