!verifier

L’extension !verifier affiche l’état du Driver Verifier et ses actions.

Driver Verifier est inclus dans Windows. Il fonctionne à la fois sur les versions vérifiées et les versions gratuites. Pour plus d’informations sur Driver Verifier, consultez Driver Verifier.

Syntaxe

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

Paramètres

Indicateurs
Spécifie les informations qui sont affichées dans la sortie de cette commande. Si Flags est égal à la valeur 4, 8, 0x20, 0x40, 0x80 ou 0x100, les arguments restants dans !verifier sont interprétés en fonction des arguments spécifiques associés à ces valeurs. Si Flags est égal à une autre valeur, même si au moins un de ces bits est défini, seuls les arguments Flags et Image sont autorisés. Flags peut prendre la valeur de n’importe quelle somme des bits suivante ; la valeur par défaut est 0 :

Bit 0 (0x1)
Affiche les noms de tous les pilotes en cours de vérification. Le nombre d’octets actuellement alloué à chaque pilote du pool non paginé et le pool paginé s’affiche également.

Bit 1 (0x2)
Affiche des informations sur les pools (la taille, les en-têtes et les tags du pool) et les allocations de mémoire en attente laissées par les pilotes déchargés. Cet indicateur n’a aucun effet, sauf si le bit 0 (0x1) est également défini.

Bit 2 (0x4)
Affiche les informations d’injection d’erreurs. L’adresse de retour, le nom du symbole et le déplacement du code demandant chaque allocation sont affichés. Si Flags a la valeur exacte 0x4 et que le paramètre Quantity est inclus, le nombre d’enregistrements affichés peut être choisi. Sinon, quatre enregistrements sont affichés.

Bit 3 (0x8)
Affiche les modifications IRQL les plus récentes apportées par les pilotes en cours de vérification. L’ancien IRQL, le nouveau IRQL, le processeur et l’horodatage sont affichés. Si Flags a la valeur exacte 0x8 et que le paramètre Quantity est inclus, le nombre d’enregistrements affichés peut être choisi. Sinon, quatre enregistrements sont affichés.

Avertissement Dans les versions 64 bits de Windows, certaines des fonctions noyau qui déclenchent ou réduisent l’IRQL sont implémentées en tant que code inline plutôt qu’en tant que fonctions exportées. Driver Verifier ne signale pas les modifications IRQL apportées par le code inline. Il est donc possible que le journal de transition IRQL produit par Driver Verifier soit incomplet. Consultez la section Remarques pour voir un exemple d’entrée de transition IRQL manquante.

Bit 6 (0x40)
(Windows Vista et versions ultérieures) Affiche les informations de l’option Forcer les demandes d’E/S en attente de Driver Verifier, y compris les suivis du journal des IRP en attente forcée.

Le paramètre Quantity spécifie le nombre de suivis à afficher. Par défaut, l’intégralité du journal est affichée.

Bit 7 (0x80)
(Windows Vista et versions ultérieures) Affiche les informations du pool de noyau présent dans le journal Allocate/Free (Allouer/Libérer).

Le paramètre Quantity spécifie le nombre de suivis à afficher. Par défaut, l’intégralité du journal est affichée.

Si Address est spécifié, seules les traces associées à l’adresse spécifiée dans le pool de noyau du journal Allocate/Free sont affichées.

Bit 8 (0x100)
(Windows Vista et versions ultérieures) Affiche les informations du journal des appels IoAllocateIrp, IoCompleteRequest et IoCancelIrp.

Le paramètre Quantity spécifie le nombre de suivis à afficher. Par défaut, l’intégralité du journal est affichée.

Si Address est spécifié, seuls les suivis associés à l’adresse IRP spécifiée sont affichés.

Bit 9 (0x200)
(Windows Vista et versions ultérieures) Affiche les entrées dans le journal de région critique.

Si Address est spécifié, seules les entrées associées à l’adresse de thread spécifiée sont affichées.

Bit 10 (0x400)
(Windows Vista et versions ultérieures) Affiche les IRP annulées actuellement surveillées par Driver Verifier.

Si Address est spécifié, seul l’IRP avec l’adresse spécifiée est affiché.

Bit 11 (0x800)
(Windows 8.1 et versions ultérieures) Affiche les entrées du journal d’injection d’erreurs créées lorsque vous sélectionnez l’option de Systematic low resource simulation (simulation systématique de faibles ressources).

Image
Si Flags est utilisé et n’est pas égal à 4, 8 ou 0x10, Image spécifie le nom d’un pilote. Image est utilisé pour filtrer les informations affichées par les valeurs Flags 0x1 et 0x2 : seul le pilote spécifié est pris en compte. Ce pilote doit être en cours de vérification.

Quantité
Si Flags est exactement égal à 0x4, Quantity spécifie le nombre d’enregistrements d’injection d’erreurs à afficher. Si Flags est exactement égal à 0x8, Quantity spécifie le nombre d’entrées IRQL du journal à afficher. Si Flags est exactement égal à 0x40, Quantity spécifie le nombre de suivis affichés à partir du journal des IRP en attente forcée. Si Flags est exactement égal à 0x80, Quantity spécifie le nombre de traces affichées à partir du pool de noyau du journal Allocate/Free. Si Flags est exactement égal à 0x100, Quantity spécifie le nombre de suivis affichés à partir du journal des appels IoAllocateIrp, IoCompleteRequest et IoCancelIrp.

-disable
Efface les paramètres actuels de Driver Verifier sur la cible de débogage. L’effacement de ces paramètres n’est pas conservé après un redémarrage. Si vous devez désactiver les paramètres du Driver Verifier pour démarrer correctement, définissez un point d’arrêt dans nt!VerifierInitSystem et utilisez la commande !verifier -disable à ce stade.

?
Affiche un court texte d’aide pour cette extension dans la fenêtre de commande de débogueur.

DLL

Kdexts.dll

Informations supplémentaires

Pour plus d’informations, consultez Driver Verifier.

Notes

L’exemple suivant illustre le fait que sur les versions 64 bits de Windows, le journal de transition IRQL n’est pas toujours terminé. Les deux entrées affichées sont des entrées consécutives dans le journal du processeur 2. La première entrée montre l’IRQL allant de 2 à 0. La deuxième entrée montre l’IRQL allant de 2 à 2. Il manque des informations sur la façon dont l’IRQL a été levée de 0 à 2.

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

Les valeurs 4, 8, 0x20, 0x40, 0x80 et 0x100 sont des valeurs spécifiques à Flags. Si ces valeurs sont utilisées, les arguments spécifiques répertoriés dans la section Paramètres peuvent être utilisés et l’affichage inclut uniquement les informations associées à cette valeur d’indicateur.

Si n’importe quelle autre valeur est utilisée pour Flags, même si au moins un de ces bits est défini, seuls les arguments Flags et Image sont autorisés. Dans ce cas, en plus de toutes les autres informations affichées, !verifier affiche les options actives du Driver Verifier ainsi que les statistiques sur les allocations de pool, les déclenchements IRQL, les verrous de rotation et les suppressions.

Si Flags est égal à 0x20, les valeurs spécifiées pour CompletionTime, CancelTime, and ForceCancellation sont utilisées par l’option Driver Hang Verification (Vérification de blocage du pilote) du Driver Verifier. Ces nouvelles valeurs prennent effet immédiatement et durent jusqu’au prochain démarrage. Lorsque vous redémarrez, les valeurs par défaut sont rétablies.

En outre, si Flags est égal à 0x20 (avec ou sans paramètres supplémentaires), le journal de Driver Hang Verification est imprimé. Pour plus d’informations sur l’interprétation du journal, consultez la section Driver Hang Verification de la documentation du Driver Verifier dans le Windows Driver Kit (WDK).

Voici un exemple de l’extension !verifier sur un ordinateur 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

Voici un exemple de l’extension !verifier sur un ordinateur Windows Vista avec le bit 7 activé et le paramètre Address spécifié.

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