Utilisation du vérificateur de pilotes pour identifier les problèmes liés aux pilotes Windows pour les utilisateurs avancés

L’outil Driver Verifier est inclus dans toutes les versions de Windows depuis Windows 2000. Il est utilisé pour détecter et résoudre de nombreux problèmes de pilote qui sont connus pour provoquer une altération du système, des défaillances ou d’autres comportements imprévisibles. Cet article explique comment utiliser Driver Verifier pour isoler et dépanner un pilote dans le système.

S’applique à : Windows Server 2012 Foundation, Windows Server 2012 Essentials, Windows Server 2012 Standard, Windows Server 2012 Datacenter
Numéro de la base de connaissances d’origine : 244617

Fonctionnalités du vérificateur de pilotes

Pour utiliser Driver Verifier, 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.

Driver Verifier peut case activée 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, paramètres et indicateurs des termes 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 Classes de règles et options driver Verifier.

Standard Options

Les options suivantes représentent ensemble les règles que tous les pilotes du système ne doivent pas enfreindre. Ces options sont activées lorsque vous choisissez d’activer les paramètres standard dans l’interface graphique du vérificateur de pilotes ou lorsque vous spécifiez le /standard commutateur lorsque vous configurez Driver Verifier à l’aide de la ligne de commande.

Vérifications automatiques

Ces vérifications sont toujours effectuées sur un pilote en cours de vérification, quelles que soient les options sélectionnées.

Exemples de vérifications automatiques :

  • Vérifications IRQL
    • Un IRQL élevé (ce qui signifie que l’IRQL actuel est inférieur à l’IRQL cible).
    • Un IRQL réduit (ce qui signifie que l’IRQL actuel est supérieur à l’IRQL cible).
  • SpinLocks :
    • Double libération d’un verrou tournant.
    • Les acquisitions/mises en production de verrous spin sont effectuées à l’IRQL approprié.
  • Allocations de mémoire :
    • Les allocations/frees de pool paginé sont effectuées à l’IRQL approprié (APC_LEVEL ou inférieur).
    • Les allocations/libérations de pool non paginées sont effectuées à l’IRQL correct (DISPATCH_LEVEL ou inférieur).
    • Aucune valeur aléatoire (non initialisée) n’est spécifiée pour ces INTERFACES de programmation d’applications (API).
    • Les allocations libérées ne pointent pas vers des objets de minuteur actifs.
  • 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 des DPC ou des threads de travail en attente.
  • Autres comportements de pilote :
    • Basculement incorrect des piles de threads.
    • Tentative d’appel de KeWaitXxx à IRQL >= DISPATCH_LEVEL.
    • Déréférencement d’un objet qui a déjà un nombre de références de 0.

Pool spécial

Lorsque cette option est active, driver Verifier alloue la plupart des demandes de mémoire du pilote à partir d’un pool spécial. Ce pool spécial est surveillé pour détecter 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, driver Verifier exerce une sollicitation extrême de la mémoire sur le pilote en invalidant le code paginable. Si le pilote tente d’accéder à la mémoire paginée au niveau de l’IRQL incorrect ou en tenant un verrou de rotation, le vérificateur de pilotes détecte ce comportement.

Suivi du pool

Lorsque cette option est active, driver Verifier 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, driver Verifier alloue les irPs 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 IRP alloués via IoAllocateIrp sont alloués à partir d’un pool spécial, si disponible.
  • Des vérifications sont effectuées dans IoCallDriver, IoCompleteRequest et IoFreeIrp pour intercepter les messages d’erreur du pilote.
  • Tous les bogues d’échecs du vérificateur d’E/S case activée avec le code DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).

Remarque

Dans Windows 7 et les versions ultérieures du système d’exploitation Windows, toutes les fonctionnalités de vérification d’E/S améliorée sont incluses dans le cadre de la vérification des E/S et il n’est plus disponible ni nécessaire de sélectionner l’option Vérification d’E/S améliorée dans le Gestionnaire du vérificateur de pilotes ou à partir de la ligne de commande.

Détection des interblocages

Lorsque cette option est active, driver Verifier surveille l’utilisation par le pilote des verrous de rotation, des mutex et des mutex rapides. Il détecte si le code du pilote est susceptible de provoquer un blocage à un moment donné.

Vérification d’E/S améliorée

Lorsque cette option est active, driver Verifier surveille les appels de plusieurs routines du gestionnaire d’E/S et effectue des tests de contrainte sur les irPs PnP, les irps d’alimentation et les IRP WMI.

Remarque

Dans Windows 7 et les versions ultérieures, toutes les fonctionnalités de vérification d’E/S améliorée 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, driver Verifier surveille l’utilisation des routines DMA par le pilote. Il détecte une utilisation incorrecte des mémoires tampons DMA, des adaptateurs et des registres de carte.

Vérifications de la sécurité

Lorsque cette option est active, driver Verifier recherche les erreurs courantes qui peuvent entraîner des failles de sécurité, telles qu’une référence aux adresses en mode utilisateur par des routines en mode noyau.

Vérifications diverses

Lorsque cette option est active, driver Verifier recherche les causes courantes des pannes de pilote, telles que la mauvaise gestion de la mémoire libérée.

Vérification de la conformité DDI

Lorsque cette option est active, driver Verifier applique un ensemble de règles DDI (Device Driver Interface) qui case activée pour 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 détectée, VerifierExt.sys sera le module qui a appelé pour que le bogue système case activée se produise.

Options supplémentaires

Ces options sont conçues pour des tests de scénarios spécifiques, ou sont des options qui injectent des défaillances ou des retards dans certaines routines DDI pour simuler des conditions de contrainte extrême.

Configuration requise du 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 avec chaque copie de Windows. Il est automatiquement installé dans le dossier System32. Verifier.exe dispose d’interfaces de ligne de commande et d’interface utilisateur graphique (GUI), ce qui vous permet de spécifier des pilotes et des niveaux de vérification appropriés. Vous pouvez également consulter 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 pilote détecte une violation, le comportement standard consiste à boguer case activée le système afin de fournir le plus d’informations possibles sur le débogage du problème. Un système connecté à un débogueur s’arrête une fois qu’un bogue case activée s’est produit.

Toutes les violations du vérificateur de pilote entraînent des vérifications de bogues, les plus courantes (bien qu’elles ne soient pas nécessairement toutes) :

  • 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 pilote :

  • !verifier videra les statistiques du vérificateur de pilote capturées. !verifier -? affiche toutes les options disponibles.
  • !deadlock vide les informations relatives aux verrous ou objets suivis par la détection d’interblocage. !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 conformité DDI qui a été violée (RuleID est toujours le premier argument du bogue case activée, tous les ID de règle de vérification de conformité DDI sont au format 0x200nn).

Vérificateur de pilotes et pilotes graphiques

Les pilotes graphiques windows en mode noyau, tels que les DLL d’imprimante et de pilote d’affichage, ne peuvent pas 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 de la mémoire du pool. D’autres rappels spécialisés, tels que EngCreatePalette et EngCreateBitmap, retournent également de 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 les autres pilotes en mode noyau, ils nécessitent uniquement un sous-ensemble de la fonctionnalité 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 du pool, sont prises en charge à des degrés divers 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 du suivi de pool et de pool spécial est prise en charge pour EngAllocMem.

L’activation du vérificateur de pilotes pour les pilotes graphiques est identique aux autres pilotes. Pour plus d’informations, consultez la section Activer le vérificateur de pilote . Les indicateurs non pris en charge tels que la vérification IRQL sont ignorés. En outre, vous pouvez utiliser la !gdikdx.verifier commande kernel-debugger pour examiner l’état actuel du vérificateur de pilote et les traces de pool pour les pilotes graphiques.

Remarque

Vous devez utiliser uniquement le paramètre d’échec d’allocation aléatoire pour les tests de robustesse. L’utilisation de ce paramètre peut entraîner des messages d’erreur de rendu. Vous ne devez donc pas utiliser ce paramètre avec des tests de vérification pour case activée l’exactitude 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 meilleur moyen 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.

Driver Verifier Manager est l’interface graphique graphique fournie avec Windows pour configurer driver Verifier. 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 des 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.

Status du pilote

La page de propriétés État du pilote vous donne une image de la status actuelle du vérificateur de pilotes. Vous pouvez voir les pilotes détectés par le vérificateur. Le status peut être l’une des valeurs suivantes :

  • Chargé : le pilote est actuellement chargé et vérifié.
  • Déchargement : le pilote n’est pas actuellement chargé, mais il a été chargé au moins une fois depuis que vous avez redémarré l’ordinateur.
  • Jamais chargé : le pilote n’a jamais été chargé. Cette status 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 status. 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. La status des pilotes est mise à jour automatiquement si vous ne passez pas en mode d’actualisation manuelle. Vous pouvez modifier la fréquence d’actualisation à l’aide des cases d’option situées dans la zone inférieure gauche de la boîte de dialogue. Pour forcer une mise à jour du status, sélectionnez Mettre à jour maintenant.

Si vous activez l’indicateur Pool spécial et que moins de 95 % des allocations de pool ont été allouées au pool spécial, un message d’avertissement s’affiche sur cette page. Cela signifie que vous devez sélectionner un ensemble plus petit 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 driver Verifier. Une valeur zéro pour un compteur peut indiquer que l’indicateur vérificateur de pilote associé n’est pas activé. Par exemple, la valeur 0 pour le compteur Autres/Erreurs 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 la fréquence d’actualisation, passer à 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 vérifié actuellement.
  • 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 il n’est pas vérifié après le redémarrage suivant.

Vous pouvez sélectionner un ou plusieurs pilotes dans la liste et basculer le status à l’aide des deux boutons sous 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 un basculement d’état.

En bas de la boîte de dialogue, vous pouvez spécifier d’autres 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 zones case activée 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 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. Cette page comporte deux autres boutons :

  • Paramètres préférés : il sélectionne certains paramètres couramment utilisés (avec tous les pilotes vérifiés).
  • Réinitialiser tout : il efface tous les paramètres du vérificateur de pilotes afin qu’aucun pilote ne soit vérifié.

Après avoir 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 pouvez uniquement activer/désactiver l’état de certains indicateurs du vérificateur de pilote. Et vous ne pouvez pas modifier la liste des pilotes en cours de vérification. Après avoir modifié la status de certaines zones de case activée, sélectionnez Appliquer pour que les modifications prennent effet. Les modifications prennent effet immédiatement. 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 / ? à une 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 les options (indicateurs)

  • verifier.exe valeur /flags

    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 des interblocages
    0x00000080 : vérification DMA
    0x00000100 : Vérifications de sécurité
    0x00000800 : Vérifications diverses
    0x00020000 : Vérification de la conformité DDI

    Autres indicateurs :

    0x00000004 : Simulation aléatoire de faibles ressources
    0x00000040 : Vérification d’E/S améliorée (Vista uniquement)
    0x00000200 : Forcer les demandes d’E/S en attente
    0x00000400 : Journalisation IRP
    0x00002000 : Vérification MDL invariante de la pile
    0x00004000 : Vérification MDL invariante pour driver0x00008000 : Fuzzing différé de Power Framework

    Par 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 (les deux exemples fonctionnent) :

    verifier.exe /standard
    
    verifier.exe /flags 0x209BB
    
  • Configurer les pilotes à vérifier

    verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
    

    Cette commande spécifie le ou les pilotes spécifiques à vérifier. Fournissez des pilotes supplémentaires dans une liste séparée par des espaces.

    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 du vérificateur et ajoute MyDriver1.sys pour la vérification.

  • Interroger les statistiques actuelles du vérificateur

    verifier /query
    

    Videz le vérificateur de pilote actuel status et les compteurs dans la sortie standard.

  • Interroger les paramètres actuels du vérificateur

    verifier /querysettings
    

    Videz les paramètres actuels du vérificateur de pilote 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 pilote 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.

Importante

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, veillez à suivre ces étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le restaurer en cas de problème. 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 :

  1. Démarrez la Rédacteur du Registre (Regedt32).

  2. Localisez la clé de Registre suivante :

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers

  3. Modifiez la REG_SZ clé.

Définissez la REG_SZ clé sur les noms qui ne respectent pas la casse des pilotes que vous souhaitez tester. Vous pouvez spécifier plusieurs pilotes, mais n’utiliser qu’un seul pilote. Ce faisant, 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 aucun problème de fiabilité du système, mais il peut entraîner le contournement de certaines vérifications des pilotes.

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.