Compartilhar via


!locks (!kdext*.locks)

A extensão !locks no Kdextx86.dll e Kdexts.dll exibe informações sobre bloqueios ERESOURCE do kernel.

Este comando de extensão não deve ser confundido com o comando de extensão !ntsdexts.locks.

!locks [Options] [Address]

Parâmetros

Opções Determina a quantidade de informações a serem exibidas. Qualquer combinação das seguintes opções pode ser usada:

-v
Exibe informações detalhadas sobre cada bloqueio.

-p
Exibe todas as informações disponíveis sobre os bloqueios, incluindo estatísticas de desempenho.

-d
Exibe informações sobre todos os bloqueios. Caso contrário, somente bloqueios com contenção serão exibidos.)

Endereço
Determina o endereço hexadecimal do bloqueio ERESOURCE a ser exibido. Se Address for 0 ou estiver omitido, informações sobre todos os bloqueios ERESOURCE no sistema serão exibidas.

DLL

Kdexts.dll

Comentários

A extensão !locks exibe todos os bloqueios mantidos em recursos por threads. Um bloqueio pode ser compartilhado ou exclusivo, o que significa que nenhum outro thread pode ter acesso a esse recurso. Essas informações são úteis quando ocorre um deadlock em um sistema. Um deadlock é causado por um thread não executor que mantém um bloqueio exclusivo em um recurso que o thread em execução precisa.

Normalmente, você pode identificar um deadlock no Microsoft Windows 2000 localizando um thread não executor que mantém um bloqueio exclusivo em um recurso que é exigido por um thread em execução. A maioria dos bloqueios é compartilhada.

Veja a seguir um exemplo da saída básica 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

O endereço de cada thread exibido é seguido por sua contagem de threads (por exemplo, "-01"). Se um thread for seguido por "<*>", ele será um dos proprietários do bloqueio. Em alguns casos, o endereço de thread inicial contém um deslocamento. Nesse caso, o endereço de thread real também é exibido.

Se você quiser encontrar mais informações sobre um desses objetos de recurso, use o endereço que segue "Resource @" como um argumento para comandos futuros. Para investigar o segundo recurso exibido no exemplo anterior, você pode usar dt ERESOURCE 80d8b0b0 ou !thread 80ed0020. Ou você pode usar a extensão !locks novamente com a opção -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