Utilisation du vérificateur KMDF
L’infrastructure fournit des fonctionnalités de vérification intégrées que vous pouvez utiliser pour tester un pilote KMDF en cours d’exécution. Cette fonctionnalité, appelée vérificateur KMDF, valide largement l’état de votre pilote et les arguments transmis par le pilote aux méthodes d’objet framework. Vous pouvez utiliser le vérificateur de l’infrastructure lui-même ou avec l’outil vérificateur de pilotes à usage général (Verifier.exe).
Si le vérificateur KMDF est activé, l’infrastructure vérifie l’acquisition de verrous et les hiérarchies, garantit que les appels à l’infrastructure se produisent au niveau du runtime d’intégration correct, vérifie l’annulation et l’utilisation de file d’attente d’E/S correctes, et garantit que le pilote et l’infrastructure suivent les contrats documentés. Il peut également simuler des conditions hors mémoire afin que le développeur du pilote puisse tester si le pilote répond correctement sans blocage, suspension ou échec du déchargement.
Lorsque le vérificateur KMDF est activé, l’infrastructure se décompose dans le débogueur si une période d’expiration par défaut de 60 secondes expire avant que certains événements décrits précédemment soient terminés. À ce stade, vous pouvez déboguer le problème ou taper « g » dans le débogueur pour redémarrer le délai d’attente. Vous pouvez modifier la période d’expiration par défaut à l’aide de la valeur de Registre DbgWaitForSignalTimeoutInSec décrite dans Contrôle du comportement du vérificateur.
Nous vous recommandons d’exécuter driver Verifyr (Verifier.exe) pendant les tests, et d’ajouter votre propre pilote et wdf01000.sys à la liste de vérification.
Remarque
Le vérificateur KMDF est automatiquement activé lors de l’utilisation des paramètres du vérificateur de /standard
pilotes. Si vous utilisez /flags
au lieu du paramètre du /standard
vérificateur de pilote, sachez que sur Windows 10, version 1803 ou plus récente, /flags
est déconseillé en faveur de /ruleclasses
. La classe de règle pour WDF est 34. Pour activer le vérificateur WDF lorsqu’il /standard
n’est pas utilisé, utilisez /ruleclasses 34
.
Vous pouvez également utiliser l’application WDF Verifier Control (WdfVerifier.exe) pour activer et désactiver le vérificateur KMDF.
Activation et désactivation de la vérification intégrée de l’infrastructure
Vous pouvez activer manuellement le vérificateur KMDF à l’aide de cette procédure :
Si votre pilote est déjà chargé, utilisez Gestionnaire de périphériques pour désactiver l’appareil. La désactivation de l’appareil entraîne le déchargement du pilote.
Utilisez RegEdit pour définir VerifierOn sur une valeur différente de zéro dans la sous-clé Parameters\Wdf du sous-clé HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services dans le Registre Windows. Une valeur différente de zéro indique que le vérificateur KMDF est activé.
Vous devrez peut-être ajouter VerifierOn manuellement à la sous-clé s’il n’est pas déjà présent.
Utilisez Gestionnaire de périphériques pour réactiver l’appareil, en chargeant ainsi le pilote.
Lorsque le pilote appelle WdfDriverCreate, l’infrastructure examine le Registre et active le vérificateur de l’infrastructure si VerifierOn a une valeur différente de zéro.
Pour désactiver le vérificateur du framework, suivez les mêmes étapes, mais définissez la valeur de VerifierOn sur zéro.
Pour déterminer si le vérificateur du framework est activé, définissez un point d’arrêt à un emplacement après que votre pilote appelle WdfDriverCreate et utilisez la commande d’extension du débogueur !wdfdriverinfo :
!wdfkd.wdfdriverinfo <votre nom **** >de pilote 0x1
Pour plus d’informations sur les commandes d’extension du débogueur, consultez Extensions de débogueur pour les pilotes basés sur Framework.
Contrôle du comportement du vérificateur
Nous vous recommandons d’utiliser l’application de contrôle WDF Verifier pour contrôler les options ci-dessous. Toutefois, vous pouvez modifier directement les valeurs suivantes dans le Registre.
Les valeurs pertinentes se trouvent sous la sous-clé Parameters\Wdf de la clé HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services .
VerifyOn (REG_DWORD)
Définissez cette valeur sur une valeur différente de zéro pour activer la macro WDFVERIFY.
DbgBreakOnError (REG_DWORD)
Si cette valeur est définie sur une valeur différente de zéro, l’infrastructure se décompose en débogueur (le cas échéant) chaque fois qu’un pilote appelle WdfVerifierDbgBreakPoint.
DbgWaitForSignalTimeoutInSec (REG_DWORD)
À compter de Windows 8, lorsque VerifierOn et DbgBreakOnError sont définis sur des valeurs différente de zéro, le pilote peut modifier le délai d’attente par défaut en définissant DbgWaitForSignalTimeoutInSec.
VerifierAllocateFailCount (REG_DWORD)
Si cette valeur est définie sur une valeur n, l’infrastructure échoue toutes les tentatives d’allocation de mémoire pour les objets du pilote après l’allocation nième .
TrackHandles (REG_MULTI_SZ)
Si cette valeur est définie sur une liste d’un ou plusieurs noms de types de handles d’objet framework, l’infrastructure effectue le suivi des références à tous les handles d’objets qui correspondent aux types de handles spécifiés.
EnhancedVerifierOptions (REG_DWORD)
KMDF uniquement
Contient une bitmap que vous pouvez utiliser pour activer les fonctionnalités facultatives du vérificateur de l’infrastructure.
VerifyDownLevel (REG_DWORD)
Si elle est définie sur une valeur différente de zéro et si le pilote a été généré avec une version du framework antérieure à la version actuelle, le vérificateur du framework inclut des tests qui ont été ajoutés après la génération du pilote.
En règle générale, si vous définissez les valeurs de Registre ci-dessus, supprimez-les lorsqu’elles ne sont plus nécessaires.
Pour obtenir une description complète de ces valeurs de Registre, consultez Valeurs de Registre pour le débogage des pilotes basés sur framework.