!locks (!kdext*.locks)
Ekstensi !locks di Kdextx86.dll dan Kdexts.dll menampilkan informasi tentang kunci ERESOURCE kernel.
Perintah ekstensi ini tidak boleh bingung dengan perintah ekstensi !ntsdexts.locks.
!locks [Options] [Address]
Parameter
Opsi Menentukan jumlah informasi yang akan ditampilkan. Kombinasi opsi berikut dapat digunakan:
-v
Menampilkan informasi terperinci tentang setiap kunci.
-p
Tampilkan semua informasi yang tersedia tentang kunci, termasuk statistik performa.
-d
Tampilkan informasi tentang semua kunci. Jika tidak, hanya kunci dengan ketidakcocokan yang ditampilkan.)
Alamat
Menentukan alamat heksadesimal kunci ERESOURCE yang akan ditampilkan. Jika Alamat adalah 0 atau dihilangkan, informasi tentang semua kunci ERESOURCE dalam sistem akan ditampilkan.
DLL
Kdexts.dll
Keterangan
Ekstensi !locks menampilkan semua kunci yang disimpan pada sumber daya berdasarkan utas. Kunci dapat dibagikan atau eksklusif, yang berarti tidak ada utas lain yang dapat memperoleh akses ke sumber daya tersebut. Informasi ini berguna ketika kebuntuan terjadi pada sistem. Kebuntuan disebabkan oleh satu utas yang tidak dijalankan yang memegang kunci eksklusif pada sumber daya yang dibutuhkan utas yang dijalankan.
Anda biasanya dapat menentukan kebuntuan di Microsoft Windows 2000 dengan menemukan satu utas yang tidak dijalankan yang menyimpan kunci eksklusif pada sumber daya yang diperlukan oleh utas yang dieksekusi. Sebagian besar kunci dibagikan.
Berikut adalah contoh output !locks dasar:
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
Perhatikan bahwa alamat untuk setiap utas yang ditampilkan diikuti oleh jumlah utasnya (misalnya, "-01"). Jika utas diikuti oleh "<*>", utas tersebut adalah salah satu pemilik kunci. Dalam beberapa kasus, alamat utas awal berisi offset. Dalam hal ini, alamat utas aktual juga ditampilkan.
Jika Anda ingin menemukan informasi selengkapnya tentang salah satu objek sumber daya ini, gunakan alamat yang mengikuti "Sumber Daya @" sebagai argumen untuk perintah di masa mendatang. Untuk menyelidiki sumber daya kedua yang ditampilkan dalam contoh sebelumnya, Anda dapat menggunakan dt ERESOURCE 80d8b0b0 atau !thread 80ed0020. Atau Anda dapat menggunakan ekstensi !locks lagi dengan opsi -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