다음을 통해 공유


!locks (!kdext*.locks)

Kdextx86.dll 및 Kdexts.dll !locks 확장에는 커널 ERESOURCE 잠금에 대한 정보가 표시됩니다.

이 확장 명령은 !ntsdexts.locks 확장 명령과 혼동해서는 안 됩니다.

!locks [Options] [Address]

매개 변수

옵션 표시할 정보의 양을 지정합니다. 다음 옵션의 조합을 사용할 수 있습니다.

-v
각 잠금에 대한 자세한 정보를 표시합니다.

-p
성능 통계를 포함하여 잠금에 대해 사용 가능한 모든 정보를 표시합니다.

-d
모든 잠금에 대한 정보를 표시합니다. 그렇지 않으면 경합이 있는 잠금만 표시됩니다.)

주소
표시할 ERESOURCE 잠금의 16진수 주소를 지정합니다. 주소가 0이거나 생략되면 시스템의 모든 ERESOURCE 잠금에 대한 정보가 표시됩니다.

DLL

Kdexts.dll

설명

!locks 확장은 스레드별로 리소스에 보관된 모든 잠금을 표시합니다. 잠금은 공유되거나 배타적일 수 있습니다. 즉, 다른 스레드가 해당 리소스에 액세스할 수 없습니다. 이 정보는 시스템에서 교착 상태가 발생할 때 유용합니다. 교착 상태는 실행 중인 스레드에 필요한 리소스에 대한 배타적 잠금을 보유하는 실행되지 않는 스레드 1개에 의해 발생합니다.

일반적으로 실행 중인 스레드에 필요한 리소스에 대한 배타적 잠금을 보유하는 실행되지 않는 스레드를 하나 찾아 Microsoft Windows 2000에서 교착 상태를 정확히 파악할 수 있습니다. 대부분의 잠금은 공유됩니다.

다음은 기본 !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

표시되는 각 스레드의 주소 뒤에 스레드 수(예: "-01")가 잇습니다. 스레드 뒤에 "<*>"가 잇는 경우 해당 스레드는 잠금 소유자 중 하나입니다. 경우에 따라 초기 스레드 주소에 오프셋이 포함됩니다. 이 경우 실제 스레드 주소도 표시됩니다.

이러한 리소스 개체 중 하나에 대한 자세한 정보를 찾으려면 "Resource @" 뒤에 있는 주소를 향후 명령에 대한 인수로 사용합니다. 이전 예제에 표시된 두 번째 리소스를 조사하려면 dt ERESOURCE 80d8b0b0 또는 !thread 80ed0020을 사용할 수 있습니다. 또는 -v 옵션과 함께 !locks 확장을 다시 사용할 수 있습니다.

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