Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’outil Vérificateur de pilotes est inclus dans chaque version de Windows depuis Windows 2000. Il est utilisé pour détecter et résoudre de nombreux problèmes de pilote connus pour provoquer une altération du système, des défaillances ou un autre comportement imprévisible. Cet article explique comment utiliser Driver Verifier pour isoler et dépanner un pilote dans le système.
S’applique à : Windows Server 2016, Windows Server 2019, Windows Server 2022, Windows Server 2025
Numéro de base de connaissances d’origine : 244617
Fonctionnalités du vérificateur de pilotes
Pour utiliser le vérificateur de pilote, exécutez Verifier.exe, puis redémarrez votre ordinateur. Vous n’avez pas besoin d’apporter d’autres modifications pour commencer à analyser les pilotes dans le système. Votre compte d’utilisateur nécessite des privilèges d’administrateur pour exécuter Verifier.exe.
Le vérificateur de pilotes peut vérifier de nombreux aspects différents du comportement d’un pilote. Ces fonctionnalités sont regroupées en options ou paramètres activés par l’utilisation d’indicateurs. (Les options de termes, les paramètres et les indicateurs sont généralement interchangeables dans la documentation du vérificateur de pilotes. Ils représentent des concepts similaires.)
Pour plus d’informations sur chaque indicateur, consultez les options du vérificateur de pilotes et les classes de règle.
Options standard
Les options suivantes représentent ensemble les règles que tous les pilotes du système ne doivent pas violer. Ces options sont activées lorsque vous choisissez d’activer les paramètres standard dans l’interface graphique utilisateur du vérificateur de pilotes ou que vous spécifiez le /standard
commutateur lorsque vous configurez le vérificateur de pilotes à l’aide de la ligne de commande.
Vérifications automatiques
Ces vérifications sont toujours effectuées sur un pilote qui est vérifié, quelles que soient les options sélectionnées.
Exemples de vérifications automatiques :
- Vérifications IRQL
- IrQL élevé (ce qui signifie que le runtime d’intégration actuel est inférieur à l’IRQL cible).
- Un IRQL réduit (ce qui signifie que le RUNTIME d’intégration actuel est supérieur à l’IRQL cible).
- SpinLocks :
- Double libération d’un verrou de rotation.
- Les acquisitions/mises en production des verrous de rotation sont effectuées au niveau du RUNTIME d’intégration approprié.
- Allocations de mémoire :
- Les allocations/libérations de pool paginées sont effectuées au niveau du runtime d’intégration correct (APC_LEVEL ou inférieur).
- Les allocations/libérations de pool non paginées sont effectuées au niveau du runtime d’intégration correct (DISPATCH_LEVEL ou inférieur).
- Aucune valeur aléatoire (non initialisée) n’est spécifiée à ces interfaces de programmation d’application (API).
- Les allocations libérées ne pointent pas vers les objets du minuteur actif.
- Vérification du déchargement du pilote :
- Vérifie que le pilote n’a pas d’opérations en attente lors du déchargement, telles que les dpcs en attente ou les threads de travail.
- Autres comportements de pilote :
- Basculement incorrect des piles de threads.
- Essayer d’appeler KeWaitXxx à IRQL >= DISPATCH_LEVEL.
- Dereferencing d’un objet qui a déjà un nombre de références de 0.
Pool spécial
Lorsque cette option est active, le vérificateur de pilotes alloue la plupart des demandes de mémoire du pilote à partir d’un pool spécial. Ce pool spécial est surveillé pour les dépassements de mémoire, les sous-exécutions de mémoire et la mémoire accessible après sa libération.
Forcer la vérification IRQL
Lorsque cette option est active, le vérificateur de pilotes place une pression de mémoire extrême sur le pilote en invalidant le code paginable. Si le pilote tente d’accéder à de la mémoire paginée à un IRQL incorrect ou tout en maintenant un verrou tournant, le Vérificateur de pilotes détecte ce comportement.
Suivi du pool
Lorsque cette option est active, le vérificateur de pilotes vérifie si le pilote a libéré toutes ses allocations de mémoire lorsqu’il est déchargé. Il révèle des fuites de mémoire.
Vérification des E/S
Lorsque cette option est active, le Vérificateur de pilotes alloue les IRP du pilote à partir d’un pool spécial et surveille la gestion des E/S du pilote. Il détecte l’utilisation illégale ou incohérente des routines d’E/S.
Lorsque le vérificateur d’E/S est activé :
- Tous les irps alloués via IoAllocateIrp sont alloués à partir d’un pool spécial, le cas échéant.
- Les vérifications sont effectuées dans IoCallDriver, IoCompleteRequest et IoFreeIrp pour intercepter les messages d’erreur du pilote.
- Toutes les défaillances du vérificateur d’E/S vérifient les bogues avec le code DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).
Remarque
Dans windows 7 et versions ultérieures du système d’exploitation Windows, toutes les fonctionnalités de la vérification améliorée des E/S sont incluses dans le cadre de la vérification d’E/S et il n’est plus disponible ni nécessaire pour sélectionner l’option Vérification améliorée des E/S dans le Gestionnaire de vérification des pilotes ou à partir de la ligne de commande.
Détection de blocage
Lorsque cette option est active, le Vérificateur de pilotes surveille l’utilisation des verrous tournants, mutex et mutex rapides par le pilote. Il détecte si le code du pilote a le potentiel d’entraîner un blocage à un moment donné.
Vérification améliorée des E/S
Lorsque cette option est active, le Vérificateur de pilotes surveille les appels de plusieurs routines du gestionnaire d’E/S et effectue des tests de résistance sur les IRP PnP, IRP d’alimentation et IRP WMI.
Remarque
Dans Windows 7 et versions ultérieures, toutes les fonctionnalités de la vérification des E/S améliorées sont incluses dans le cadre de la vérification des E/S. Cette option n’est plus disponible ou requise dans le Gestionnaire du vérificateur de pilotes ou à partir d’une ligne de commande.
Vérification DMA
Lorsque cette option est active, le Vérificateur de pilotes surveille l’utilisation des routines DMA par le pilote. Il détecte une utilisation incorrecte des mémoires tampons, des adaptateurs et des registres cartographiques DMA.
Vérifications de sécurité
Lorsque cette option est active, Driver Verifier recherche des erreurs courantes pouvant entraîner des vulnérabilités de sécurité, telles qu’une référence aux adresses en mode utilisateur par routines en mode noyau.
Vérifications diverses
Lorsque cette option est active, Driver Verifier recherche les causes courantes des incidents du pilote, telles que la mauvaise gestion de la mémoire libérée.
Vérification de la conformité DDI
Lorsque cette option est active, le vérificateur de pilotes applique un ensemble de règles DDI (Device Driver Interface) qui vérifient l’interaction appropriée entre un pilote et l’interface du noyau du système d’exploitation.
L’option de vérification de conformité DDI est implémentée à l’aide d’une bibliothèque en mode noyau, appelée VerifierExt.sys. Si une violation de l’une des règles de vérification de conformité DDI est trouvée, VerifierExt.sys sera le module qui a appelé la vérification des bogues système à se produire.
Options supplémentaires
Ces options sont conçues pour des tests de scénario spécifiques, ou sont des options qui injectent des défaillances ou des retards dans certaines routines DDI pour simuler des conditions de stress extrêmes.
Configuration requise pour le vérificateur de pilotes
La seule exigence est que vous devez installer Windows Server 2012. Vous pouvez activer Driver Verifier sur les versions commerciales et vérifiées de Windows. Si l’Antivirus Norton est installé, n’activez pas la détection d’interblocage du vérificateur de pilotes.
Activer le vérificateur de pilotes
Vous pouvez activer Driver Verifier à l’aide de Verifier.exe. Verifier.exe est inclus dans chaque copie de Windows. Il est automatiquement installé dans le dossier System32. Verifier.exe dispose à la fois d’interfaces de ligne de commande et d’interface utilisateur graphique (GUI), ce qui vous permet de spécifier les pilotes et les niveaux de vérification appropriés. Vous pouvez également voir les statistiques du vérificateur de pilotes en temps réel. Pour plus d’informations, consultez la section Gestionnaire du vérificateur de pilotes (Verifier.exe).
Violations du vérificateur de pilote de débogage
Si le vérificateur de pilotes détecte une violation, le comportement standard consiste à vérifier le système afin de fournir les informations les plus possibles sur le débogage du problème. Un système connecté à un débogueur s’arrête une fois qu’une vérification de bogue s’est produite.
Toutes les violations du vérificateur de pilote entraînent des vérifications de bogues, mais les plus courantes (bien qu’elles ne soient pas nécessairement toutes) sont les suivantes :
- 0xC1 : SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
- 0xC4 : DRIVER_VERIFIER_DETECTED_VIOLATION
- 0xC6 : DRIVER_CAUGHT_MODIFYING_FREED_POOL
- 0xC9 : DRIVER_VERIFIER_IOMANAGER_VIOLATION
- 0xD6 : DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
- 0xE6 : DRIVER_VERIFIER_DMA_VIOLATION
!analyze -v
est la meilleure commande à utiliser lors du démarrage d’une nouvelle session de débogage. Cette commande retourne des informations utiles et tente d’identifier le pilote défaillant.
Extensions de débogueur spécifiques au vérificateur de pilotes :
-
!verifier
vide les statistiques du vérificateur de pilote capturées.!verifier -?
affiche toutes les options disponibles. -
!deadlock
vide les informations relatives aux verrous ou aux objets suivis par la détection de blocage.!deadlock -?
affiche toutes les options disponibles. -
!iovirp [address]
videra les informations relatives à un IRP suivi par le vérificateur d’E/S. -
!ruleinfo [RuleID]
videra les informations relatives à la règle de vérification de la conformité DDI qui a été violée (RuleID est toujours le premier argument de la vérification des bogues, tous les ID de règle de vérification de conformité DDI se trouvent sous la forme 0x200nn).
Vérificateur de pilotes et pilotes graphiques
Les pilotes graphiques en mode noyau Windows, tels que les DLL d’imprimante et de pilote d’affichage, ne sont pas autorisés à appeler directement le point d’entrée du pool. Les allocations de pool sont effectuées indirectement à l’aide de rappels DDI (Graphics Device Driver Interface) pour Win32k.sys. Par exemple, EngAllocMem est le rappel qu’un pilote graphique appelle pour allouer explicitement la mémoire du pool. D’autres rappels spécialisés, tels que EngCreatePalette et EngCreateBitmap, retournent également la mémoire du pool.
Pour fournir les mêmes tests automatisés pour les pilotes graphiques, la prise en charge de certaines fonctions du vérificateur de pilotes est incorporée dans Win32k.sys. Étant donné que les pilotes graphiques sont plus restreints que d’autres pilotes en mode noyau, ils ne nécessitent qu’un sous-ensemble des fonctionnalités du vérificateur de pilotes. Plus précisément, la vérification IRQL et la vérification des E/S ne sont pas nécessaires. Les autres fonctionnalités, à savoir l’utilisation d’un pool spécial, l’échec aléatoire des allocations de pool et le suivi de pool, sont prises en charge à différents degrés dans les différents rappels DDI graphiques.
Les échecs aléatoires sont pris en charge pour les fonctions de rappel DDI graphiques suivantes :
- EngAllocMem
- EngAllocUserMem
- EngCreateBitmap
- EngCreateDeviceSurface
- EngCreateDeviceBitmap
- EngCreatePalette
- EngCreateClip
- EngCreatePath
- EngCreateWnd
- EngCreateDriverObj
- BRUSHOBJ_pvAllocRbrush
- CLIPOBJ_ppoGetPath
En outre, l’utilisation d’un pool spécial et du suivi de pool est prise en charge pour EngAllocMem.
L’activation du vérificateur de pilote pour les pilotes graphiques est identique à celle des autres pilotes. Pour plus d’informations, consultez la section Activer le vérificateur de pilotes . Les indicateurs non pris en charge, tels que la vérification IRQL, sont ignorés. En outre, vous pouvez utiliser la commande du débogueur de noyau pour examiner l’état !gdikdx.verifier
actuel du vérificateur de pilote et les traces de pool pour les pilotes graphiques.
Remarque
Vous devez uniquement utiliser le paramètre d’échec d’allocation aléatoire pour les tests de robustesse. L’utilisation de ce paramètre peut entraîner le rendu des messages d’erreur. Vous ne devez donc pas utiliser ce paramètre avec des tests de vérification pour vérifier la justesse de l’implémentation du pilote graphique (par exemple, en comparant la sortie du pilote graphique à une image de référence).
Gestionnaire du vérificateur de pilotes (Verifier.exe)
L’outil Gestionnaire du vérificateur de pilotes (Verifier.exe) est le moyen préféré de créer et de modifier les paramètres du vérificateur de pilotes et de collecter des statistiques à partir du vérificateur de pilotes. Verifier.exe se trouve dans le dossier %WinDir%\System32 pour chaque installation Windows.
Le Gestionnaire du vérificateur de pilotes est l’interface utilisateur graphique incluse dans Windows pour configurer le vérificateur de pilotes. Démarrez le Gestionnaire du vérificateur de pilotes à l’aide de verifier.exe sans aucun autre commutateur de ligne de commande. Chaque fois que les commutateurs sont inclus, la version basée sur la ligne de commande de l’utilitaire est utilisée.
Pour obtenir de l’aide sur la configuration du vérificateur de pilote, exécutez à verifier.exe /?
partir d’une fenêtre CMD Administrateur.
État du pilote
La page de propriétés État du pilote vous donne une image de l’état actuel du vérificateur de pilotes. Vous pouvez voir les pilotes détectés par le vérificateur. L’état peut être l’une des valeurs suivantes :
- Chargé : le pilote est actuellement chargé et vérifié.
- Déchargé : le pilote n’est pas actuellement chargé, mais il a été chargé au moins une fois depuis le redémarrage de l’ordinateur.
- Jamais chargé : le pilote n’a jamais été chargé. Cet état peut indiquer que le fichier image du pilote est endommagé ou que vous avez spécifié un nom de pilote manquant dans le système.
Sélectionnez l’en-tête de liste pour trier la liste par noms de pilotes ou par état. Dans la zone supérieure droite de la boîte de dialogue, vous pouvez afficher les types actuels de la vérification qui sont en vigueur. L’état des pilotes est mis à jour automatiquement si vous ne passez pas en mode d’actualisation manuelle. Vous pouvez modifier le taux d’actualisation à l’aide des cases d’option dans la zone inférieure gauche de la boîte de dialogue. Pour forcer une mise à jour de l’état, sélectionnez Mettre à jour maintenant.
Si vous activez l’indicateur de pool spécial et que moins de 95 % des allocations de pool sont passées au pool spécial, un message d’avertissement s’affiche sur cette page. Cela signifie que vous devez sélectionner un plus petit ensemble de pilotes à vérifier, ou ajouter plus de mémoire physique à l’ordinateur pour obtenir une meilleure couverture de la vérification des allocations de pool.
Compteurs globaux
Cette page de propriétés affiche la valeur actuelle de certains compteurs gérés par le vérificateur de pilotes. Une valeur nulle pour un compteur peut indiquer que l’indicateur du vérificateur de pilote associé n’est pas activé. Par exemple, une valeur de 0 pour le compteur Other/Faults indique que l’indicateur de simulation de ressource faible n’est pas activé. Vous pouvez surveiller l’activité du vérificateur, car les valeurs des compteurs sont mises à jour automatiquement par défaut. Vous pouvez modifier le taux d’actualisation, basculer vers l’actualisation manuelle ou forcer une actualisation à l’aide du groupe de contrôles dans la zone inférieure gauche de la boîte de dialogue.
Suivi du pool
Cette page de propriétés affiche d’autres statistiques collectées à partir du vérificateur de pilotes. Tous les compteurs affichés sur cette page sont liés à l’indicateur de suivi du pool du vérificateur. La plupart d’entre eux sont des compteurs par pilote, tels que les allocations actuelles, les octets alloués actuels, etc. Vous devez sélectionner un nom de pilote dans la zone de combinaison supérieure pour afficher les compteurs de ce pilote spécifique.
Paramètres
Vous pouvez utiliser cette page pour créer et modifier les paramètres du vérificateur de pilote. Les paramètres sont enregistrés dans le Registre et vous devez redémarrer l’ordinateur pour que les paramètres prennent effet. Vous pouvez utiliser la liste pour afficher les pilotes actuellement installés. Chaque pilote peut se trouver dans l’un des états suivants :
- Vérifier activé : le pilote est actuellement vérifié.
- Vérifier désactivé : le pilote n’est pas actuellement vérifié.
- Vérifier activé (redémarrage nécessaire) : le pilote est vérifié uniquement après le redémarrage suivant.
- Vérifier désactivé (redémarrage nécessaire) : le pilote est actuellement vérifié, mais n’est pas vérifié après le redémarrage suivant.
Vous pouvez sélectionner un ou plusieurs pilotes dans la liste et changer l’état à l’aide des deux boutons de la liste. Vous pouvez également cliquer avec le bouton droit sur un nom de pilote pour afficher le menu contextuel, ce qui vous permet d’effectuer le basculement de l’état.
En bas de la boîte de dialogue, vous pouvez spécifier davantage de pilotes (séparés par des espaces) que vous souhaitez vérifier après le redémarrage suivant. Vous utilisez généralement ce contrôle d’édition lorsque vous souhaitez installer un nouveau pilote qui n’est pas déjà chargé.
Si le groupe de cases d’option en haut de la liste est défini sur Vérifier tous les pilotes, la liste et les boutons Vérifier et Ne pas vérifier et le contrôle d’édition ne sont pas disponibles. Cela signifie qu’après le redémarrage suivant, tous les pilotes du système sont vérifiés.
Vous pouvez définir le type de vérification à l’aide des cases à cocher dans la zone supérieure droite de la boîte de dialogue. Vous pouvez activer la vérification des E/S au niveau 1 ou au niveau 2. La vérification de niveau 2 est plus forte que le niveau 1.
Enregistrez toute modification apportée aux paramètres en sélectionnant Appliquer. Il existe deux autres boutons dans cette page :
- Paramètres préférés : il sélectionne certains paramètres couramment utilisés (avec tous les pilotes vérifiés).
- Réinitialisez tout : il efface tous les paramètres du vérificateur de pilotes afin qu’aucun pilote ne soit vérifié.
Une fois que vous avez sélectionné Appliquer, vous devez redémarrer l’ordinateur pour que les modifications prennent effet.
Paramètres volatiles
Vous pouvez utiliser cette page de propriétés pour modifier immédiatement les indicateurs du vérificateur de pilote. Vous ne pouvez activer que l’état de certains indicateurs du vérificateur de pilotes. Vous ne pouvez pas modifier la liste des pilotes en cours de vérification. Une fois que vous avez modifié l’état de certaines cases à cocher, activez Appliquer pour que les modifications prennent effet. Les modifications sont immédiatement appliquées. Et ils durent jusqu’à ce que vous apportez des modifications supplémentaires, ou jusqu’à ce que vous redémarrez l’ordinateur.
Interface de ligne de commande
Vous pouvez également exécuter Verifier.exe à partir d’une ligne de commande (pour plus d’informations, tapez verifier.exe / ? à l’invite de commandes). Plusieurs commutateurs peuvent être utilisés sur la ligne de commande, par exemple :
Verifier.exe /flags 0x209BB /driver MyDriver1.sys MyFilterDriver1.sys
La liste suivante présente les indicateurs de ligne de commande les plus couramment utilisés :
Configurer des options (indicateurs)
valeur /flags verifier.exe
La valeur est un nombre hexadécimal (un préfixe 0x est requis) qui représente la valeur collective des indicateurs à activer. La valeur de chaque indicateur est affichée dans la
verifier /?
sortie.Indicateurs standard :
0x00000000 : Vérifications automatiques
0x00000001 : Pool spécial
0x00000002 : Forcer la vérification IRQL
0x00000008 : Suivi du pool
0x00000010 : vérification des E/S
0x00000020 : détection d’interblocage
0x00000080 : vérification DMA
0x00000100 : vérifications de sécurité
0x00000800 : vérifications diverses
0x00020000 : vérification de conformité DDIAutres indicateurs :
0x00000004 : simulation aléatoire des ressources faibles
0x00000040 : vérification améliorée des E/S (Vista uniquement)
0x00000200 : forcer les requêtes d’E/S en attente
0x00000400 : Journalisation IRP
0x00002000 : vérification MDL invariante pour la pile
0x00004000 : Vérification MDL invariante pour driver0x00008000 : délai de retard power frameworkPar exemple, pour activer uniquement le pool spécial, la vérification des E/S et les vérifications diverses :
verifier.exe /flags 0x811
Pour activer tous les paramètres standard (l’un ou l’autre fonctionne) :
verifier.exe /standard
verifier.exe /flags 0x209BB
Configurer les pilotes pour vérifier
verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
Cette commande spécifie le pilote ou les pilotes spécifiques à vérifier. Fournissez des pilotes supplémentaires dans une liste séparée par espace.
verifier.exe /all
Cette commande vérifie tous les pilotes du système.
Configurer à l’aide du mode Volatile
verifier.exe /volatile /flags *value /adddriver MyDriver1.sys*
Cette commande modifie immédiatement les indicateurs de vérificateur et ajoute MyDriver1.sys pour la vérification.
Interroger les statistiques du vérificateur actuel
verifier /query
Videz l’état actuel du vérificateur de pilote et les compteurs dans la sortie standard.
Interroger les paramètres du vérificateur actuel
verifier /querysettings
Videz les paramètres actuels du vérificateur de pilotes dans la sortie standard.
Effacer les paramètres du vérificateur
verifier.exe /reset
Cette commande efface tous les paramètres actuels du vérificateur de pilote.
Informations supplémentaires pour les développeurs de pilotes
Les sections qui suivent décrivent plus de détails sur les paramètres du vérificateur de pilotes susceptibles d’intéresser les développeurs de pilotes. Ces paramètres ne sont généralement pas requis par les professionnels de l’informatique.
Important
Cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, vérifiez que vous suivez ces étapes attentivement. Pour une protection supplémentaire, sauvegardez le Registre avant de le modifier. Ensuite, vous pouvez restaurer le Registre si un problème se produit. Pour plus d’informations sur la procédure de sauvegarde et de restauration du Registre, consultez l’article Comment sauvegarder et restaurer le Registre dans Windows.
Pour activer Driver Verifier en modifiant le Registre, procédez comme suit :
Démarrer l’Éditeur du Registre (Regedt32).
Localisez la clé de Registre suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
Modifiez la
REG_SZ
clé.
Définissez la clé sur les noms non respectant la REG_SZ
casse des pilotes que vous souhaitez tester. Vous pouvez spécifier plusieurs pilotes, mais utiliser un seul pilote. Ainsi, vous pouvez vous assurer que les ressources système disponibles ne sont pas épuisées prématurément. L’épuisement prématuré des ressources n’entraîne pas de problèmes de fiabilité du système, mais il peut entraîner un contournement de certains contrôles de pilote.
La liste suivante présente des exemples de valeurs pour la REG_SZ
clé :
- Ntfs.sys
- Win32k.sys ftdisk.sys
- *.sys
Vous pouvez spécifier le niveau de vérification du pilote dans la clé de Registre suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel
La valeur de la clé est un DWORD représentant la collection de tous les indicateurs activés.