!verifier!verifier

! Verifier 拡張機能には、ドライバーの検証ツールとその操作の状態が表示されます。The !verifier extension displays the status of Driver Verifier and its actions.

ドライバーの検証ツールは Windows に含まれています。Driver Verifier is included in Windows. オンとオフの両方のビルドで動作します。It works on both checked and free builds. ドライバーの検証機能の詳細については、Windows Driver Kit (WDK) のドキュメントの ドライバーの検証 に関するトピックを参照してください。For information about Driver Verifier, see the Driver Verifier topic in the Windows Driver Kit (WDK) documentation.

構文Syntax

!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 ?

パラメータParameters

フラグ Flags
このコマンドの出力に表示される情報を指定します。Specifies what information is displayed in the output from this command. Flags が値4、8、0x20、0x40、0x80、または0x100 と等しい場合、 ! verifier の残りの引数は、これらの値に関連付けられている特定の引数に基づいて解釈されます。If Flags is equal to the value 4, 8, 0x20, 0x40, 0x80, or 0x100, then the remaining arguments to !verifier are interpreted based on the specific arguments associated with those values. フラグ がその他の値と等しい場合、これらのビットの1つ以上が設定されていても、フラグイメージ の引数のみが許可されます。If Flags is equal to any other value, even if one or more of these bits are set, only the Flags and Image arguments are permitted. フラグ には、次のビットの合計を指定できます。既定値は0です。Flags can be any sum of the following bits; the default is 0:

ビット 0 (0x1)Bit 0 (0x1)
検証されているすべてのドライバーの名前が表示されます。Displays the names of all drivers being verified. ページングされていないプールとページプールから各ドライバーに現在割り当てられているバイト数も表示されます。The number of bytes currently allocated to each driver from the nonpaged pool and the paged pool is also displayed.

ビット 1 (0x2)Bit 1 (0x2)
プール (プールサイズ、ヘッダー、およびプールタグ) と、アンロードされたドライバーによって残された未処理のメモリ割り当てに関する情報を表示します。Displays information about pools (pool size, headers, and pool tags) and outstanding memory allocations left by unloaded drivers. ビット 0 (0x1) も設定されていない限り、このフラグは無効です。This flag has no effect unless bit 0 (0x1) is also set.

ビット 2 (0x4)Bit 2 (0x4)
フォールト挿入情報を表示します。Displays fault injection information. 各割り当てを要求しているコードのリターンアドレス、シンボル名、および置き換えが表示されます。The return address, symbol name, and displacement of the code requesting each allocation are displayed. フラグ が完全に0x4 で、 Quantity パラメーターが含まれている場合は、表示されているレコードの数を選択できます。If Flags is exactly 0x4 and the Quantity parameter is included, the number of these records displayed can be chosen. それ以外の場合は、4つのレコードが表示されます。Otherwise, four records are displayed.

ビット 3 (0x8)Bit 3 (0x8)
検証されているドライバーによって行われた最新の IRQL の変更を表示します。Displays the most recent IRQL changes made by the drivers being verified. 古い IRQL、新しい IRQL、プロセッサ、タイムスタンプが表示されます。The old IRQL, new IRQL, processor, and time stamp are displayed. フラグ が完全に0x8 で、 Quantity パラメーターが含まれている場合は、表示されているレコードの数を選択できます。If Flags is exactly 0x8 and the Quantity parameter is included, the number of these records displayed can be chosen. それ以外の場合は、4つのレコードが表示されます。Otherwise, four records are displayed.

警告 64ビットバージョンの Windows では、IRQL を上げ下げするカーネル関数の中には、エクスポート関数としてではなくインラインコードとして実装されているものがあります。Warning In 64-bit versions of Windows, some of the kernel functions that raise or lower the IRQL are implemented as inline code rather than as exported functions. ドライバーの検証ツールは、インラインコードによって行われた IRQL の変化を報告しないため、ドライバーの検証ツールによって生成された IRQL 遷移ログが不完全になる可能性があります。Driver Verifier does not report IRQL changes made by inline code, so it is possible for the IRQL transition log produced by Driver Verifier to be incomplete. IRQL 遷移エントリの不足の例については、「解説」を参照してください。See Remarks for an example of a missing IRQL transition entry.

ビット 6 (0x40)Bit 6 (0x40)
(Windows Vista 以降)強制保留中の Irp のログからのトレースを含め、Driver Verifier の Force pending I/o Requests オプションの情報を表示します。(Windows Vista and later) Displays information from the Force Pending I/O Requests option of Driver Verifier, including traces from the log of forced pending IRPs.

Quantity パラメーターには、表示するトレースの数を指定します。The Quantity parameter specifies the number of traces to be displayed. 既定では、ログ全体が表示されます。By default, the entire log is displayed.

ビット 7 (0x80)Bit 7 (0x80)
(Windows Vista 以降)カーネルプールの割り当て/空きログの情報を表示します。(Windows Vista and later) Displays information from the kernel pool Allocate/Free log.

Quantity パラメーターには、表示するトレースの数を指定します。The Quantity parameter specifies the number of traces to be displayed. 既定では、ログ全体が表示されます。By default, the entire log is displayed.

アドレス を指定すると、カーネルプールの割り当て/空きログ内の指定されたアドレスに関連付けられているトレースだけが表示されます。If Address is specified, only traces associated with the specified address within the kernel pool Allocate/Free log are displayed.

ビット 8 (0x100)Bit 8 (0x100)
(Windows Vista 以降)IoAllocateIrp、IoCompleteRequest、および Ioallocateirp 呼び出しのログの情報を表示します。(Windows Vista and later) Displays information from the log of IoAllocateIrp, IoCompleteRequest and IoCancelIrp calls.

Quantity パラメーターには、表示するトレースの数を指定します。The Quantity parameter specifies the number of traces to be displayed. 既定では、ログ全体が表示されます。By default, the entire log is displayed.

アドレス が指定されている場合は、指定された IRP アドレスに関連付けられているトレースだけが表示されます。If Address is specified, only traces associated with the specified IRP address are displayed.

ビット 9 (0x200)Bit 9 (0x200)
(Windows Vista 以降)クリティカルな領域のログにエントリを表示します。(Windows Vista and later) Displays entries in the Critical Region log.

Address が指定されている場合、指定されたスレッドアドレスに関連付けられているエントリのみが表示されます。If Address is specified, only entries associated with the specified thread address are displayed.

ビット 10 (0x400)Bit 10 (0x400)
(Windows Vista 以降)現在ドライバーの検証ツールによって監視されている取り消し済みの Irp を表示します。(Windows Vista and later) Displays cancelled IRPs that are currently being watched by Driver Verifier.

アドレス を指定すると、指定したアドレスを持つ IRP のみが表示されます。If Address is specified, only the IRP with the specified address is displayed.

ビット 11 (0x800)Bit 11 (0x800)
(Windows 8.1 以降) 体系的な低リソースシミュレーション オプションを選択したときに作成されたフォールトインジェクションログのエントリを表示します。(Windows 8.1 and later) Display entries from the fault injection log that is created when you select the Systematic low resource simulation option.

イメージ Image
フラグ が使用され、が4、8、または0x10 と等しくない場合、 Image はドライバーの名前を指定します。If Flags is used and is not equal to 4, 8, or 0x10, Image specifies the name of a driver. Image は、 Flags 値が0x1 および0x2 の場合に表示される情報をフィルター処理するために使用されます。指定されたドライバーのみが対象となります。Image is used to filter the information displayed by Flags values of 0x1 and 0x2: only the specified driver is considered. このドライバーは現在検証されている必要があります。This driver must be currently verified.

数量 Quantity
フラグ が0x4 と完全に等しい場合、 Quantity は、表示するフォールト挿入レコードの数を指定します。If Flags is exactly equal to 0x4, Quantity specifies the number of fault injection records to display. フラグ が0x8 と同じである場合、 Quantity は表示する IRQL ログエントリの数を指定します。If Flags is exactly equal to 0x8, Quantity specifies the number of IRQL log entries to display. フラグ が0x40 と同じ場合、 Quantity は、強制保留中の irp のログから表示されるトレースの数を指定します。If Flags is exactly equal to 0x40, Quantity specifies the number of traces displayed from the log of forced pending IRPs. フラグが0x80 と厳密に等しい場合、Quantity はカーネルプールの割り当て/空きログから表示されるトレースの数を指定します。If Flags is exactly equal to 0x80, Quantity specifies the number of traces displayed from the kernel pool Allocate/Free log. フラグが0x100 と厳密に等しい場合、Quantity は、IoAllocateIrp、IoCompleteRequest、および Ioallocateirp 呼び出しのログから表示されるトレースの数を指定します。If Flags is exactly equal to 0x100, Quantity specifies the number of traces displayed from the log of IoAllocateIrp, IoCompleteRequest and IoCancelIrp calls.

-disable -disable
デバッグターゲットの現在のドライバーの検証の設定を消去します。Clears the current Driver Verifier settings on the debug target. これらの設定をクリアしても、再起動によって保持されるわけではありません。The clearing of these settings does not persist through a reboot. ドライバーの検証機能の設定を正常に起動するために無効にする必要がある場合は、nt! にブレークポイントを設定します。VerifierInitSystem を使用して、その時点で ! verifier-disable コマンドを使用します。If you need to disable the Driver Verifier settings to successfully boot, set a breakpoint at nt!VerifierInitSystem and use the !verifier -disable command at that point.

? ?
デバッガーコマンドウィンドウにこの拡張機能の簡単なヘルプテキストを表示します。Displays some brief Help text for this extension in the Debugger Command window.

DLLDLL

Kdexts.dllKdexts.dll

追加情報Additional Information

ドライバーの検証機能の詳細については、Windows driver KIT (WDK) のドキュメントを参照してください。For information about Driver Verifier, see the Windows Driver Kit (WDK) documentation.

注釈Remarks

次の例は、64ビットバージョンの Windows では、IRQL 遷移ログが必ずしも完全ではないことを示しています。The following example illustrates that on 64-bit versions of Windows, the IRQL transition log is not always complete. 表示される2つのエントリは、プロセッサ2のログの連続したエントリです。The two entries shown are consecutive entries in the log for Processor 2. 最初のエントリは、2から0に向かう IRQL を示しています。The first entry shows the IRQL going from 2 to 0. 2番目のエントリは、2から2に向かう IRQL を示しています。The second entry shows the IRQL going from 2 to 2. 0から2の IRQL が発生した方法に関する情報がありません。Information about how the IRQL got raised from 0 to 2 is missing.

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

4、8、および0x20、0x40、0x80、および0x100 の値は、 フラグ の特殊な値です。The values of 4, 8, and 0x20, 0x40, 0x80, and 0x100 are special values for Flags. これらの値が使用されている場合は、 Parameters セクションに示されている特殊な引数を使用できます。表示には、そのフラグ値に関連付けられている情報のみが含まれます。If these values are used, the special arguments listed in the Parameters section can be used, and the display will include only the information associated with that flag value.

フラグ に他の値が使用されている場合、これらのビットの1つ以上が設定されていても、フラグイメージ の引数のみが許可されます。If any other value for Flags is used, even if one or more of these bits are set, only the Flags and Image arguments are permitted. このような状況では、表示される他のすべての情報に加えて、 ! verifier には、アクティブなドライバーの検証ツールのオプションと、プールの割り当て、IRQL の発生、スピンロック、およびトリムの統計が表示されます。In this situation, in addition to all the other information displayed, !verifier will display the Driver Verifier options that are active, along with statistics on pool allocations, IRQL raises, spin locks, and trims.

フラグ が0x20 の場合、[実行 時間]、[ Canceltime]、および [ ForceCancellation ] に指定された値は、ドライバーの検証ツールの [ドライバーのハング検証] オプションで使用されます。If Flags equals 0x20, the values specified for CompletionTime, CancelTime, and ForceCancellation are used by the Driver Hang Verification option of Driver Verifier. これらの新しい値は、次の起動時まで即座に有効になります。These new values take effect immediately and last until the next boot. 再起動すると、既定値に戻ります。When you reboot, they revert to their default values.

また、 フラグ が 0x20 (追加のパラメーターの有無にかかわらず) に等しい場合は、ドライバーのハング検証ログが出力されます。Also, if Flags equals 0x20 (with or without additional parameters), the Driver Hang Verification log is printed. ログの解釈の詳細については、Windows Driver Kit (WDK) のドキュメントにあるドライバーの検証ツールのドキュメントのドライバーのハング検証に関するセクションを参照してください。For information on interpreting the log, see the Driver Hang Verification section of the Driver Verifier documentation in the Windows Driver Kit (WDK) documentation.

Windows 7 コンピューターの ! verifier 拡張機能の例を次に示します。Here is an example of the !verifier extension on a Windows 7 computer.

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

次に示すのは、ビット7がオンになっていて アドレス が指定されている Windows Vista コンピューターの ! verifier 拡張機能の例です。Here is an example of the !verifier extension on a Windows Vista computer with bit 7 turned on and Address specified.

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