!Verifier
Ekstensi !verifier menampilkan status Driver Verifier dan tindakannya.
Pemverifikasi Driver disertakan dalam Windows. Ini berfungsi pada build yang diperiksa dan gratis. Untuk informasi tentang Pemverifikasi Driver, lihat Pemverifikasi Driver.
Sintaks
!verifier [Flags [Image]]
!verifier 4 [Quantity]
!verifier 8 [Quantity]
!verifier 0x40 [Quantity]
!verifier 0x80 [Quantity]
!verifier 0x80 Address
!verifier 0x100 [Quantity]
!verifier 0x100 Address
!verifier 0x200 [Address]
!verifier 0x400 [Address]
!verifier -disable
!verifier ?
Parameter
Bendera
Menentukan informasi apa yang ditampilkan dalam output dari perintah ini. Jika Bendera sama dengan nilai 4, 8, 0x20, 0x40, 0x80, atau 0x100, maka argumen yang tersisa ke !verifier ditafsirkan berdasarkan argumen tertentu yang terkait dengan nilai tersebut. Jika Bendera sama dengan nilai lain, bahkan jika satu atau beberapa bit ini diatur, hanya argumen Bendera dan Gambar yang diizinkan. Bendera dapat berupa jumlah bit berikut; defaultnya adalah 0:
Bit 0 (0x1)
Menampilkan nama semua pengandar yang sedang diverifikasi. Jumlah byte yang saat ini dialokasikan untuk setiap driver dari kumpulan yang tidak dipagasi dan kumpulan halaman juga ditampilkan.
Bit 1 (0x2)
Menampilkan informasi tentang kumpulan (ukuran kumpulan, header, dan tag kumpulan) dan alokasi memori terutang yang ditinggalkan oleh driver yang tidak dimuat. Bendera ini tidak berpengaruh kecuali bit 0 (0x1) juga diatur.
Bit 2 (0x4)
Menampilkan informasi injeksi kesalahan. Alamat pengembalian, nama simbol, dan perpindahan kode yang meminta setiap alokasi ditampilkan. Jika Bendera persis 0x4 dan parameter Kuantitas disertakan, jumlah rekaman ini yang ditampilkan dapat dipilih. Jika tidak, empat rekaman akan ditampilkan.
Bit 3 (0x8)
Menampilkan perubahan IRQL terbaru yang dibuat oleh driver yang sedang diverifikasi. IRQL lama, IRQL baru, prosesor, dan stempel waktu ditampilkan. Jika Bendera persis 0x8 dan parameter Kuantitas disertakan, jumlah rekaman ini yang ditampilkan dapat dipilih. Jika tidak, empat rekaman akan ditampilkan.
Peringatan Di Windows versi 64-bit, beberapa fungsi kernel yang menaikkan atau menurunkan IRQL diimplementasikan sebagai kode sebaris daripada sebagai fungsi yang diekspor. Driver Verifier tidak melaporkan perubahan IRQL yang dibuat oleh kode sebaris, sehingga mungkin log transisi IRQL yang dihasilkan oleh Driver Verifier tidak lengkap. Lihat Komentar untuk contoh entri transisi IRQL yang hilang.
Bit 6 (0x40)
(Windows Vista dan yang lebih baru) Menampilkan informasi dari opsi Permintaan I/O Paksa Tertunda dari Pemverifikasi Driver, termasuk jejak dari log RUN yang tertunda paksa.
Parameter Kuantitas menentukan jumlah jejak yang akan ditampilkan. Secara default, seluruh log ditampilkan.
Bit 7 (0x80)
(Windows Vista dan yang lebih baru) Menampilkan informasi dari kumpulan kernel Alokasikan/Log gratis.
Parameter Kuantitas menentukan jumlah jejak yang akan ditampilkan. Secara default, seluruh log ditampilkan.
Jika Alamat ditentukan, hanya jejak yang terkait dengan alamat yang ditentukan dalam kumpulan kernel Alokasikan/Log gratis yang ditampilkan.
Bit 8 (0x100)
(Windows Vista dan yang lebih baru) Menampilkan informasi dari log panggilan IoAllocateIrp, IoCompleteRequest, dan IoCancelIrp.
Parameter Kuantitas menentukan jumlah jejak yang akan ditampilkan. Secara default, seluruh log ditampilkan.
Jika Alamat ditentukan, hanya jejak yang terkait dengan alamat IRP yang ditentukan yang ditampilkan.
Bit 9 (0x200)
(Windows Vista dan yang lebih baru) Menampilkan entri dalam log Wilayah Kritis.
Jika Alamat ditentukan, hanya entri yang terkait dengan alamat alur yang ditentukan yang ditampilkan.
Bit 10 (0x400)
(Windows Vista dan yang lebih baru) Menampilkan IRP yang dibatalkan yang saat ini sedang ditonton oleh Driver Verifier.
Jika Alamat ditentukan, hanya IRP dengan alamat yang ditentukan yang ditampilkan.
Bit 11 (0x800)
(Windows 8.1 dan yang lebih baru) Tampilkan entri dari log injeksi kesalahan yang dibuat saat Anda memilih opsi Simulasi sumber daya rendah sistematis.
Citra
Jika Bendera digunakan dan tidak sama dengan 4, 8, atau 0x10, Gambar menentukan nama driver. Gambar digunakan untuk memfilter informasi yang ditampilkan oleh nilai Bendera 0x1 dan 0x2: hanya driver yang ditentukan yang dipertimbangkan. Pengandar ini saat ini harus diverifikasi.
Jumlah
Jika Bendera sama persis dengan 0x4, Kuantitas menentukan jumlah rekaman injeksi kesalahan yang akan ditampilkan. Jika Bendera sama persis dengan 0x8, Kuantitas menentukan jumlah entri log IRQL yang akan ditampilkan. Jika Bendera sama persis dengan 0x40, Kuantitas menentukan jumlah jejak yang ditampilkan dari log RUN yang tertunda paksa. Jika Bendera sama persis dengan 0x80, Kuantitas menentukan jumlah jejak yang ditampilkan dari kumpulan kernel Alokasikan/Log gratis. Jika Bendera sama persis dengan 0x100, Kuantitas menentukan jumlah jejak yang ditampilkan dari log panggilan IoAllocateIrp, IoCompleteRequest, dan IoCancelIrp.
-menonaktifkan
Menghapus pengaturan Pemverifikasi Driver saat ini pada target debug. Penghapusan pengaturan ini tidak bertahan melalui boot ulang. Jika Anda perlu menonaktifkan pengaturan Pemverifikasi Driver agar berhasil melakukan booting, atur titik henti pada nt! VerifierInitSystem dan gunakan perintah !verifier -disable pada saat itu.
Apa yang terjadi?
Menampilkan beberapa teks Bantuan singkat untuk ekstensi ini di jendela Perintah Debugger.
DLL
Kdexts.dll
Informasi Tambahan
Untuk informasi, lihat Pemverifikasi Driver.
Keterangan
Contoh berikut menggambarkan bahwa pada Windows versi 64-bit, log transisi IRQL tidak selalu selesai. Dua entri yang ditampilkan adalah entri berturut-turut dalam log untuk Prosesor 2. Entri pertama menunjukkan IRQL dari 2 ke 0. Entri kedua menunjukkan IRQL dari 2 ke 2. Informasi tentang bagaimana IRQL dinaikkan dari 0 ke 2 hilang.
Thread: fffffa80068c9400
Old irql: 0000000000000002
New irql: 0000000000000000
Processor: 0000000000000002
Time stamp: 0000000000000857
fffff8800140f12a ndis!ndisNsiGetInterfaceInformation+0x20a
fffff88001509478 NETIO!NsiGetParameterEx+0x178
fffff88005f062f2 nsiproxy!NsippGetParameter+0x24a
fffff88005f086db nsiproxy!NsippDispatchDeviceControl+0xa3
fffff88005f087a0 nsiproxy!NsippDispatch+0x48
Thread: fffffa80068c9400
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000002
Time stamp: 0000000000000857
fffff8800140d48d ndis!ndisReferenceTopMiniportByNameForNsi+0x1ce
fffff8800140f072 ndis!ndisNsiGetInterfaceInformation+0x152
fffff88001509478 NETIO!NsiGetParameterEx+0x178
fffff88005f062f2 nsiproxy!NsippGetParameter+0x24a
fffff88005f086db nsiproxy!NsippDispatchDeviceControl+0xa3
Nilai 4, 8, dan 0x20, 0x40, 0x80, dan 0x100 adalah nilai khusus untuk Bendera. Jika nilai-nilai ini digunakan, argumen khusus yang tercantum di bagian Parameter dapat digunakan, dan tampilan hanya akan menyertakan informasi yang terkait dengan nilai bendera tersebut.
Jika ada nilai lain untuk Bendera yang digunakan, bahkan jika satu atau beberapa bit ini diatur, hanya argumen Bendera dan Gambar yang diizinkan. Dalam situasi ini, selain semua informasi lain yang ditampilkan, !verifier akan menampilkan opsi Driver Verifier yang aktif, bersama dengan statistik pada alokasi kumpulan, kenaikan IRQL, kunci putar, dan trim.
Jika Bendera sama dengan 0x20, nilai yang ditentukan untuk CompletionTime, CancelTime, dan ForceCancellation digunakan oleh opsi Verifikasi Driver Hang dari Driver Verifier. Nilai-nilai baru ini berlaku segera dan berlangsung hingga boot berikutnya. Saat Anda me-reboot, mereka kembali ke nilai defaultnya.
Selain itu, jika Bendera sama dengan 0x20 (dengan atau tanpa parameter tambahan), log Verifikasi Driver Hang dicetak. Untuk informasi tentang menafsirkan log, lihat bagian Verifikasi Driver Hang dari dokumentasi Driver Verifier dalam dokumentasi Windows Driver Kit (WDK).
Berikut adalah contoh ekstensi !verifier pada komputer Windows 7.
2: kd> !verifier 0xf
Verify Level 9bb ... enabled options are:
Special pool
Special irql
All pool allocations checked on unload
Io subsystem checking enabled
Deadlock detection enabled
DMA checking enabled
Security checks enabled
Miscellaneous checks enabled
Summary of All Verifier Statistics
RaiseIrqls 0x0
AcquireSpinLocks 0x362
Synch Executions 0x0
Trims 0xa34a
Pool Allocations Attempted 0x7b058
Pool Allocations Succeeded 0x7b058
Pool Allocations Succeeded SpecialPool 0x7b058
Pool Allocations With NO TAG 0x0
Pool Allocations Failed 0x0
Resource Allocations Failed Deliberately 0x0
Current paged pool allocations 0x1a for 00000950 bytes
Peak paged pool allocations 0x1b for 00000AC4 bytes
Current nonpaged pool allocations 0xe3 for 00046110 bytes
Peak nonpaged pool allocations 0x10f for 00048E40 bytes
Driver Verification List
Entry State NonPagedPool PagedPool Module
fffffa8003b6f670 Loaded 000000a0 00000854 videoprt.sys
Current Pool Allocations 00000002 00000013
Current Pool Bytes 000000a0 00000854
Peak Pool Allocations 00000006 00000014
Peak Pool Bytes 000008c0 000009c8
PoolAddress SizeInBytes Tag CallersAddress
fffff9800157efc0 0x0000003c Vprt fffff88002c62963
fffff9800146afc0 0x00000034 Vprt fffff88002c62963
fffff980015bafe0 0x00000018 Vprt fffff88002c628f7
...
fffffa8003b6f620 Loaded 00046070 000000fc usbport.sys
Current Pool Allocations 000000e1 00000007
Current Pool Bytes 00046070 000000fc
Peak Pool Allocations 0000010d 0000000a
Peak Pool Bytes 00048da0 00000254
PoolAddress SizeInBytes Tag CallersAddress
fffff98003a38fc0 0x00000038 usbp fffff88004215e34
fffff98003a2cfc0 0x00000038 usbp fffff88004215e34
fffff9800415efc0 0x00000038 usbp fffff88004215e34
...
-----------------------------------------------
Fault injection trace log
-----------------------------------------------
Driver Verifier didn't inject any faults.
-----------------------------------------------
Track irql trace log
-----------------------------------------------
Displaying most recent 0x0000000000000004 entries from the IRQL transition log.
There are up to 0x100 entries in the log.
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff8800420f2ca USBPORT!USBPORT_DM_IoTimerDpc+0x9a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
fffff80002a7bdd6 nt!KiProcessExpiredTimerList+0xc6
fffff80002a7c4be nt!KiTimerExpiration+0x1be
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff88004205f3a USBPORT!USBPORT_AcquireEpListLock+0x2e
fffff880042172df USBPORT!USBPORT_Core_TimeoutAllTransfers+0x1f
fffff8800420f2ca USBPORT!USBPORT_DM_IoTimerDpc+0x9a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff88004201694 USBPORT!MPf_CheckController+0x4c
fffff8800420f26a USBPORT!USBPORT_DM_IoTimerDpc+0x3a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
fffff80002a7bdd6 nt!KiProcessExpiredTimerList+0xc6
Thread: fffff80002bf8c40
Old irql: 0000000000000002
New irql: 0000000000000002
Processor: 0000000000000000
Time stamp: 000000000000495e
fffff8800420167c USBPORT!MPf_CheckController+0x34
fffff8800420f26a USBPORT!USBPORT_DM_IoTimerDpc+0x3a
fffff80002a5b5bf nt!IopTimerDispatch+0x132
fffff80002a7c29e nt!KiProcessTimerDpcTable+0x66
fffff80002a7bdd6 nt!KiProcessExpiredTimerList+0xc6
Berikut adalah contoh ekstensi !verifier pada komputer Windows Vista dengan bit 7 diaktifkan dan Alamat ditentukan.
0: kd> !verifier 80 a2b1cf20
# Parsing 00004000 array entries, searching for address a2b1cf20.
Pool block a2b1ce98, Size 00000168, Thread a2b1ce98
808f1be6 ndis!ndisFreeToNPagedPool+0x39
808f11c1 ndis!ndisPplFree+0x47
808f100f ndis!NdisFreeNetBufferList+0x3b
8088db41 NETIO!NetioFreeNetBufferAndNetBufferList+0xe
8c588d68 tcpip!UdpEndSendMessages+0xdf
8c588cb5 tcpip!UdpSendMessagesDatagramsComplete+0x22
8088d622 NETIO!NetioDereferenceNetBufferListChain+0xcf
8c5954ea tcpip!FlSendNetBufferListChainComplete+0x1c
809b2370 ndis!ndisMSendCompleteNetBufferListsInternal+0x67
808f1781 ndis!NdisFSendNetBufferListsComplete+0x1a
8c04c68e pacer!PcFilterSendNetBufferListsComplete+0xb2
809b230c ndis!NdisMSendNetBufferListsComplete+0x70
# 8ac4a8ba test1!HandleCompletedTxPacket+0xea
Pool block a2b1ce98, Size 00000164, Thread a2b1ce98
822af87f nt!VerifierExAllocatePoolWithTagPriority+0x5d
808f1c88 ndis!ndisAllocateFromNPagedPool+0x1d
808f11f3 ndis!ndisPplAllocate+0x60
808f1257 ndis!NdisAllocateNetBufferList+0x26
80890933 NETIO!NetioAllocateAndReferenceNetBufferListNetBufferMdlAndData+0x14
8c5889c2 tcpip!UdpSendMessages+0x503
8c05c565 afd!AfdTLSendMessages+0x27
8c07a087 afd!AfdTLFastDgramSend+0x7d
8c079f82 afd!AfdFastDatagramSend+0x5ae
8c06f3ea afd!AfdFastIoDeviceControl+0x3c1
8217474f nt!IopXxxControlFile+0x268
821797a1 nt!NtDeviceIoControlFile+0x2a
8204d16a nt!KiFastCallEntry+0x127