Partager via


Outils de vérification des pilotes

Le Kit de pilotes Windows (WDK) fournit des outils de vérification de pilotes qui vous aident à détecter et corriger les erreurs pendant le développement. Ces outils incluent des outils d’analyse statique tels que CodeQL et des outils dynamiques tels que Driver Verifier qui peuvent trouver des bogues critiques avant le déploiement. L’utilisation de ces outils de vérification au début du développement permet de gagner du temps et d’éviter de graves problèmes de pilote en production.

La documentation WDK décrit ces outils de vérification et recommande leur utilisation, car chaque outil détecte différents types d’erreurs de pilote de différentes manières. Ces outils sont beaucoup plus efficaces que les vérifications manuelles. Ils peuvent détecter les erreurs qui ne sont généralement pas trouvées dans les tests de pilotes standard, et ils incarnent l’expertise des développeurs de pilotes chevronnés et des concepteurs d’interface de pilote Windows.

Pour obtenir de meilleurs résultats, utilisez tous les outils qui peuvent s’exécuter sur votre pilote. Si vous omettez l’un de ces outils, vous risquez de manquer un bug grave dans votre pilote.

Outils de vérification statiques et dynamiques

Il existe deux types de base d’outils de vérification :

  • Les outils de vérification statique examinent le code du pilote sans exécuter le pilote. Étant donné que ces outils ne s’appuient pas sur des tests qui exercicent le code, ils peuvent être extrêmement approfondis. Théoriquement, les outils de vérification statique peuvent examiner tout le code du pilote, y compris les chemins de code rarement exécutés en pratique. Toutefois, étant donné que le pilote n’est pas en cours d’exécution, ces outils peuvent générer des résultats faux positifs. Autrement dit, ils peuvent signaler une erreur dans un chemin de code qui ne se produit pas dans la pratique.

    CodeQL est l’outil d’analyse statique principal pour les pilotes. CodeQL fournit un langage de requête puissant qui traite le code comme une base de données à interroger, ce qui facilite l’écriture de requêtes pour des comportements et des modèles spécifiques. Le programme de compatibilité matérielle Windows nécessite codeQL pour les tests STL (Static Tool Logo) sur nos systèmes d’exploitation client et serveur. Pour plus d’informations, consultez CodeQL et le test du logo Static Tools.

  • Les outils de vérification dynamique examinent le code du pilote pendant l’exécution du pilote, généralement en interceptant les appels aux routines de prise en charge courantes du pilote et en remplaçant les appels par leurs propres versions de vérification des erreurs des mêmes routines. Étant donné que le pilote est en cours d’exécution pendant que les outils dynamiques effectuent la vérification, les résultats faux positifs sont rares. Toutefois, étant donné que les outils dynamiques détectent uniquement les actions qui se produisent pendant qu’ils surveillent le pilote, les outils peuvent manquer certains défauts du pilote si la couverture des tests de pilote n’est pas adéquate. En même temps, en utilisant des informations disponibles au moment de l’exécution ( par exemple, des informations plus difficiles à extraire statiquement à partir du code source ) les outils de vérification dynamique peuvent détecter certaines classes d’erreurs de pilote plus difficiles à détecter avec des outils d’analyse statique.

Utilisez une combinaison d’outils de vérification statique et dynamique. Les outils statiques vous permettent de vérifier les chemins de code difficiles à exercer dans la pratique, tandis que les outils dynamiques trouvent des erreurs graves qui se produisent dans le pilote.

Vue d’ensemble des outils de vérification

Important

L’outil Static Driver Verifier (SDV) n’est plus pris en charge. Il n’est pas disponible dans les builds WDK ultérieures à la build 26017, y compris le WDK Windows 24H2 RTM. L’utilisation du SDV pour l’analyse n’est pas recommandée.

Le WDK décrit les outils de vérification suivants et recommande leur utilisation par les développeurs de pilotes et les testeurs. Ils sont répertoriés dans l’ordre dans lequel vous les utilisez généralement.

Après la compilation du code

  • CodeQL est un moteur d’analyse de code sémantique puissant. La combinaison d’une suite étendue de requêtes de sécurité à valeur élevée et d’une plateforme robuste en fait un outil précieux pour sécuriser le code de pilote. Pour plus d’informations, consultez CodeQL et le test du logo Static Tools.

Quand le pilote s’exécute

Utilisez les outils de vérification dynamique suivants dès que le pilote est généré et s’exécute sans erreurs évidentes.

  • Le vérificateur de pilotes est un outil de vérification dynamique écrit en particulier pour les pilotes Windows. Il inclut plusieurs tests que vous pouvez exécuter simultanément sur plusieurs pilotes. Le vérificateur de pilotes est si efficace pour trouver des bogues sérieux dans les pilotes que les développeurs de pilotes expérimentés et les testeurs configurent pour qu’ils s’exécutent chaque fois que leur pilote s’exécute dans un environnement de développement ou de test. Driver Verifier est inclus dans Windows. Lorsque vous activez le vérificateur de pilotes pour un pilote, vous devez également exécuter plusieurs tests sur le pilote. Le vérificateur de pilotes peut détecter certains bogues de pilotes difficiles à détecter à l’aide d’outils de vérification statiques seuls. Voici quelques exemples de ces types de bogues :

    • Dépassements de mémoire tampon du pool de noyau. Lorsque le pilote validé alloue des tampons de mémoire de pool, le Vérificateur de pilotes les protège en utilisant une page de mémoire non accessible. Si le pilote tente d’utiliser la mémoire après la fin de la mémoire tampon, le vérificateur de pilotes lance une vérification de bogue.

    • Utilisation de la mémoire après l’avoir libérée. Les blocs de mémoire de pool spéciaux utilisent leur propre page de mémoire et ne partagent pas de pages de mémoire avec d’autres allocations. Lorsque le pilote libère le bloc de mémoire du pool, la page de mémoire correspondante devient non accessible. Si le driver tente d’utiliser cette mémoire après l’avoir libérée, le driver crashe instantanément.

    • Utilisation de la mémoire paginable lors de l’exécution à l’irQL avec élévation de privilèges. Lorsqu’un pilote vérifié déclenche l’IRQL à DISPATCH_LEVEL ou une version ultérieure, le vérificateur de pilotes supprime toutes les mémoires paginables du jeu de travail système, simulant un système sous pression mémoire. Le pilote se bloque s’il tente d’utiliser l’une de ces adresses virtuelles paginables.

    • Simulation de ressources faibles. Pour simuler un système dans des conditions de ressources faibles, Driver Verifier peut échouer à diverses API du noyau du système d’exploitation que les pilotes appellent.

    • Fuites de mémoire. Driver Verifier effectue le suivi des allocations de mémoire effectuées par un pilote et vérifie que le pilote libère la mémoire avant son déchargement.

    • Les opérations d’E/S qui prennent trop de temps pour se terminer ou pour être annulées. Le vérificateur de pilotes peut tester la logique du pilote pour répondre aux STATUS_PENDING valeurs renvoyées à partir d’IoCallDriver.

    • Vérification de conformité DDI. (Disponible à partir de Windows 8) 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’assainisseur d’adresses du noyau (KASAN) est une technologie de détection de bogues prise en charge sur les pilotes Windows qui vous permet de détecter plusieurs classes d’accès à la mémoire illégale, telles que les dépassements de mémoire tampon et les événements d’utilisation après libération.

  • Application Verificationr est un outil de vérification dynamique pour les applications en mode utilisateur et les pilotes écrits en C ou C++. Il ne vérifie pas le code managé.