Partager via


CodeQL et test du logo Static Tools

Sécurité du codeQL et du pilote

Microsoft s’engage à limiter l’exposition du système d’exploitation Windows aux attaques et à s’assurer que les pilotes tiers répondent à une barre de sécurité forte est essentielle pour atteindre cet objectif. L’une des étapes de la mise en place de cette barre de sécurité est le prérequis du Programme de compatibilité matérielle Windows (WHCP) qui indique que toutes les soumissions de pilotes doivent utiliser le moteur CodeQL sur le code source du pilote et corriger les violations considérées comme « Must-Fix » (dont la résolution est considérée obligatoire).

CodeQL, de GitHub, est un puissant moteur d’analyse sémantique de code, et la combinaison d’une suite étendue de requêtes de sécurité à forte valeur ajoutée ainsi qu’une plateforme robuste en font un outil précieux pour sécuriser le code des pilotes.

L’utilisation de CodeQL à des fins de test WHCP est acceptable dans le cadre du Contrat de licence utilisateur final de HLK (Hardware Lab Kit). Pour les participants au WHCP, le CLUF du HLK remplace les Conditions générales d’utilisation de CodeQL de GitHub en indiquant que CodeQL peut être utilisé lors de l’analyse automatisée, de l’intégration ou du déploiement continus, dans le cadre des processus d’ingénierie normaux aux fins d’analyse des pilotes à soumettre et à certifier dans le cadre du WHCP.

L’exigence d’analyser le code source du pilote et de corriger toutes les violations « Must-Fix » sera appliquée par le Test de logo des outils statiques.

Cette rubrique montre comment :

  • Utilisez CodeQL pour analyser le code source de votre pilote à la recherche de problèmes de sécurité connus à fort impact.
  • Assurez-vous que le test de logo des outils statiques peut consommer les résultats de l’exécution de CodeQL.
  • Déterminez les requêtes « Must-Fix » qui doivent être exécutées pour la certification WHCP.

Important

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. Nous continuerons à maintenir la prise en charge de SDV et de l’autorité de certification sur les produits plus anciens. Les partenaires sont vivement encouragés à passer en revue les exigences CodeQL pour le test STL (Static Tool Logo).

CLUF du HLK et CodeQL

L’utilisation de CodeQL à des fins de certification pour le Programme de compatibilité matérielle Windows est acceptable dans le cadre du Contrat de licence utilisateur final de Hardware Lab Kit (HLK). Pour les participants au WHCP, le CLUF du HLK remplace les Conditions générales d’utilisation de CodeQL de GitHub. Le CLUF du HLK indique que CodeQL peut être utilisé lors de l’analyse automatisée, de l’intégration ou du déploiement continus, dans le cadre des processus d’ingénierie normaux aux fins d’analyse des pilotes à soumettre et à certifier dans le cadre du Programme de compatibilité matérielle Windows. Pour ceux qui suivent pour un usage général, veuillez consulter les Conditions générales d’utilisation de CodeQL de GitHub et/ou contactez CodeQL.

Concepts CodeQL

CodeQL est un moteur d’analyse statique utilisé par les développeurs pour effectuer une analyse de sécurité sur du code en dehors d’un environnement en direct. CodeQL ingère le code pendant sa compilation et construit une base de données à partir de celui-ci. La base de données devient un répertoire contenant des données interrogeables, une référence source et des fichiers journaux. Une fois la base de données construite, on peut y exécuter des analyses en utilisant des requêtes CodeQL (également appelées vérifications ou règles) qui détermineront si le code source contient des violations ou des vulnérabilités de sécurité. CodeQL fournit une bibliothèque de requêtes standard qui vérifient la correction du langage, la sémantique, et offre une grande valeur aux développeurs qui souhaitent s’assurer que leur code est exempt de bugs et de vulnérabilités.

CodeQL offre également la possibilité de créer des requêtes personnalisées. Pour plus d’informations sur l’écriture de requêtes personnalisées, veuillez consulter la rubrique Rédaction de requêtes dans la documentation de CodeQL.

CodeQL fournit également un outil en ligne de commande CodeQL (CLI) pour effectuer facilement des actions CodeQL et/ou effectuer une analyse à grande échelle.

La documentation supplémentaire sur le CLI CodeQL peut être trouvée sur Démarrage de CodeQL.

1. Configuration de CodeQL

Pour une utilisation dans le cadre du Programme de compatibilité matérielle Windows

Matrice de versions de sortie du Programme de compatibilité matérielle Windows

Utilisez cette matrice pour déterminer les versions à télécharger.

Version de sortie de Windows Version de CodeQL CLI Version du pack QL microsoft/windows-drivers Version du pack QL codeql/cpp-queries Branche à utiliser
Windows Server 2022 2.4.6 ou 2.15.4 1.0.13 (Si vous utilisez codeql 2.15.4) 0.9.0 (Si vous utilisez codeql 2.15.4) WHCP_21H2
Windows 11 2.4.6 ou 2.15.4 1.0.13 (Si vous utilisez codeql 2.15.4) 0.9.0 (Si vous utilisez codeql 2.15.4) WHCP_21H2
Windows 11, version 22H2 2.6.3 ou 2.15.4 1.0.13 (Si vous utilisez codeql 2.15.4) 0.9.0 (Si vous utilisez codeql 2.15.4) WHCP_22H2
Windows 11, version 23H2 2.6.3 ou 2.15.4 1.0.13 (Si vous utilisez codeql 2.15.4) 0.9.0 (Si vous utilisez codeql 2.15.4) WHCP_22H2
Windows 11, version 24H2 2.15.4 1.1.0 0.9.0 WHCP_24H2

Aucune version du pack QL n’est spécifiée pour CodeQL CLI 2.4.6 et 2.6.3 car seules les versions plus récentes de CodeQL prennent en charge les packs QL.

Pour une utilisation générale

Pour une utilisation générale de CodeQL avec d’autres versions de Windows en dehors du programme WHCP, ou pour le développement et le test de requêtes, nous vous recommandons actuellement la version et la branche suivantes :

Version de CodeQL CLI Version de qlpack microsoft/windows-drivers Version de codeql/cpp-queries Branche à utiliser
2.15.4 latest latest main

Téléchargez et installez CodeQL

Remarque

Visual Studio 17.8 a interrompu la compatibilité avec les anciennes versions de CodeQL utilisées dans les branches WHCP_21H2 et WHCP_22H2. La version 2.15.4 de CodeQL CLI a été validée pour une utilisation avec WHCP 21H2 et WHCP 22H2 pour Visual Studio 17.8 et les versions ultérieures. Pour le Programme WHCP, utilisez la version de CodeQL CLI en accord avec le tableau ci-dessus et la version de Windows pour laquelle vous avez la certification - version 2.4.6, version 2.6.3 ou version 2.15.4. Pour une utilisation générale avec la branche principale, utilisez la version 2.15.4 de CodeQL CLI.

  1. Créez un répertoire pour contenir CodeQL. Cet exemple utilise C:\codeql-home\

    C:\> mkdir C:\codeql-home
    
  2. Reportez-vous aux tableaux ci-dessus pour sélectionner la version de CodeQL CLI à utiliser en accord avec la branche désirée des requêtes de pilotes de Microsoft. Si vous effectuez une analyse dans le cadre du programme WHCP, veuillez consulter le tableau Pour une utilisation dans le cadre du Programme de compatibilité matérielle Windows, ou alors utilisez la branche principale et 2.15.4. L’utilisation d’une version différente peut entraîner une base de données incompatible avec les bibliothèques.

  3. Accédez à la version des binaires de CodeQL CLI associée aux tableaux ci-dessus, et téléchargez le fichier zip en accord avec l’architecture de votre projet. Par exemple, pour Windows 64 bits « codeql-win64.zip ».

  4. Extrayez le répertoire du CLI Codeql dans celui que vous venez de créer, par exemple : C:\codeql-home\codeql.

  5. Vérifiez que CodeQL est installé correctement en vérifiant la version :

     C:\codeql-home\codeql>codeql --version
     CodeQL command-line toolchain release 2.15.4.
     Copyright (C) 2019-2023 GitHub, Inc.
     Unpacked in: C:\codeql-home\codeql
         Analysis results depend critically on separately distributed query and
         extractor modules. To list modules that are visible to the toolchain,
         use 'codeql resolve qlpacks' and 'codeql resolve languages'.
    
  6. La commande d’aide affiche les informations d’utilisation de la ligne de commande.

    C:\codeql-home\codeql\>codeql --help
    Usage: codeql <command> <argument>...
    Create and query CodeQL databases, or work with the QL language.
    
    GitHub makes this program freely available for the analysis of open-source software and certain other uses, but it is
    not itself free software. Type codeql --license to see the license terms.
    
          --license              Show the license terms for the CodeQL toolchain.
    Common options:
      -h, --help                 Show this help text.
      -v, --verbose              Incrementally increase the number of progress messages printed.
      -q, --quiet                Incrementally decrease the number of progress messages printed.
    Some advanced options have been hidden; try --help -v for a fuller view.
    Commands:
      query     Compile and execute QL code.
      bqrs      Get information from .bqrs files.
      database  Create, analyze and process CodeQL databases.
      dataset   [Plumbing] Work with raw QL datasets.
      test      Execute QL unit tests.
      resolve   [Deep plumbing] Helper commands to resolve disk locations etc.
      execute   [Deep plumbing] Low-level commands that need special JVM options.
      version   Show the version of the CodeQL toolchain.
      generate  Generate formatted QL documentation.
    

Installation des packages CodeQL

Pour les branches WHCP_21H2 et WHCP_22H2

Si vous utilisez Visual Studio 2022 17.8 ou une version ultérieure avec WHCP_21H2 ou WHCP_22H2 et la version 2.15.4 du CodeQL CLI :

  • Suivez la procédure pour « TOUTES LES AUTRES BRANCHES ».
  • Assurez-vous de supprimer le sous-module CodeQL si vous avez toujours une ancienne version du référentiel cloné. CodeQL peut essayer d’utiliser les requêtes dans le sous-module par défaut, ce qui entraîne des erreurs en raison de versions incompatibles.

Si vous utilisez Visual Studio version 17.7 ou inférieure à AND WHCP_21H2 ou WHCP_22H2 AND CodeQL CLI version 2.4.6 ou 2.6.3 :

  • Suivez les instructions spéciales ci-dessous pour WHCP_21H2 et WHCP_22H2 avec VS17.7 ou une version antérieure.

TOUTES LES AUTRES BRANCHES

Téléchargez les packages de requêtes CodeQL.

Il n’est plus nécessaire de cloner le dépôt Windows-Driver-Developer-Supplemental-Tools pour utiliser les requêtes pour la certification. Les packages CodeQL (« packs QL » ou « packs de requêtes ») sont désormais utilisés.

  1. Téléchargez la version correcte du pack microsoft/windows-drivers à partir de la matrice des versions de publication du programme de compatibilité matérielle Windows. Spécifiez le @<version> dans la commande ci-dessous.
C:\codeql-home\> codeql pack download microsoft/windows-drivers@<version>

Par exemple, si vous utilisez WHCP_24H2, exécutez la commande suivante pour télécharger le pack de requêtes windows-drivers 1.1.0 :

C:\codeql-home\> codeql pack download microsoft/windows-drivers@1.1.0

Utilisez cette commande pour télécharger la version 0.9.0 du pack de requêtes CodeQL cpp-queries.

C:\codeql-home\> codeql pack download codeql/cpp-queries@0.9.0

(Il est possible d’ignorer l’étape ci-dessus, car l’option --download télécharge les requêtes nécessaires ultérieurement dans le processus d’analyse.)

CodeQL installe les packs de requêtes téléchargés dans le répertoire par défaut :

C:\Users\<current user>\.codeql\packages\microsoft\windows-drivers\<downloaded version>\

Ne changez pas ce répertoire ou ne déplacez pas le paquet installé.

Télécharger les suites de requêtes de pilotes Windows

Localisez et copiez sur le PC local les deux fichiers de suites de requêtes principaux.

  • windows-driver-recommended.qls
  • windows-driver-mustfix.qls

Leurs contenus sont indiqués ci-dessous dans Requêtes et Suites et les deux fichiers se trouvent ici : https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/main/suites.

2. Générer la base de données CodeQL

Ces exemples supposent l’utilisation d’un environnement de développement Windows et que l’emplacement d’installation est C:\codeql-home, mais vous pouvez utiliser la configuration qui vous convient. Veuillez consulter Langages et frameworks pris en charge par CodeQL pour voir une liste des compilateurs pris en charge.

  1. Créez un répertoire pour que CodeQL place les bases de données qu’il crée. Par exemple : C:\codeql-home\bases de données

    mkdir C:\codeql-home\databases
    
  2. Utilisez la commande CodeQL pour créer une base de données en utilisant les paramètres suivants :

    • le premier paramètre est un lien vers votre répertoire de bases de données. Par exemple : C:\codeql-home\bases de données\MaBasePilote (cette commande échouera si le répertoire existe déjà).
    • --language ou -l est le ou les langages de votre code source (il peut s’agir d’une liste séparée par des virgules ; ex: [cpp, javascript]).
    • -- source ou -s est le chemin de votre code source.
    • --command ou -c est votre commande de build ou le chemin de votre fichier de build.
    codeql database create <database directory> --language=<language> --source=<path to source code> --command=<build command or path to build file>
    

Exemples

Exemple de pilote unique.

C:\codeql-home\codeql> codeql database create D:\DriverDatabase --language=cpp --source-root=D:\Drivers\SingleDriver --command="msbuild /t:rebuild D:\Drivers\SingleDriver\SingleDriver.sln"

Exemple de plusieurs pilotes.

C:\codeql-home\codeql> codeql database create D:\SampleDriversDatabase --language=cpp --source-root=D:\AllMyDrivers\SampleDrivers --command=D:\AllMyDrivers\SampleDrivers\BuildAllSampleDrivers.cmd

Pour plus d’informations ou d’aide sur l’utilisation de la commande database create, veuillez consulter la section Création de bases de données CodeQL ou utilisez la commande suivante :

C:\codeql-home\codeql> codeql database create --help

3. Effectuer l’analyse

Remarque

Si vous utilisez la version 17.7 ou un version plus ancienne de Visual Studio ET WHCP_21H2 ou WHCP_22H2 ET la version 2.4.6 ou 2.6.3 de CodeQL VLI, suivez les Instructions spéciales ci-dessous pour WHCP_21H2 et WHCP_22H2 utilisant VS17.7 ou une version antérieure.

À ce stade, la configuration est terminée et la prochaine étape consiste à effectuer l’analyse réelle sur le code source du pilote.

  1. Utilisez la commande CodeQL pour analyser votre base de données en utilisant les paramètres suivants :

    • le premier paramètre est un lien vers votre répertoire de bases de données. Par exemple : C:\codeql-home\bases de données\MaBasePilote. (Cette commande échouera si le répertoire n’existe pas.)
    • L’indicateur --download indique à CodeQL de télécharger les dépendances avant d’exécuter les requêtes.
    • --format est le type de fichier de sortie. Les options incluent : SARIF et CSV. (Pour les utilisateurs de WHCP, utilisez le format SARIF).
    • --output est le chemin où vous voulez le fichier de sortie, assurez-vous d’inclure le format dans le nom du fichier. (Cette commande échouera si le répertoire n’existe pas déjà).
    • le paramètre des spécificateurs de requêtes est une liste d’arguments séparés par des espaces qui peut inclure :
      • un chemin vers un fichier de requête
      • un chemin vers un répertoire contenant des fichiers de requête
      • un chemin vers un fichier de suite de requêtes
      • le nom d’un package de requêtes CodeQL
    codeql database analyze --download <path to database> <path to query suite .qls file> --format=sarifv2.1.0 --output=<outputname>.sarif
    

    Exemple :

    codeql database analyze --download D:\DriverDatabase suites/windows-driver-recommended.qls --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif 
    

    Pour plus d’informations ou d’aide sur l’utilisation de la commande database analyze, veuillez consulter la rubrique Analyser les bases de données avec la CLI CodeQL et Utiliser un paquet CodeQL pour analyser une base de données CodeQL.

    Pour obtenir de l’aide en ligne, utilisez la commande suivante :

    C:\codeql-home\codeql> codeql database analyze --help
    

Instructions spéciales pour WHCP_21H2 et WHCP_22H2 utilisant VS17.7 ou une version antérieure

Ces instructions s’appliquent uniquement lorsque vous utilisez à la fois de Visual Studio 17.7 ou une version antérieure, ainsi que de CodeQL 2.6.3 ou 2.4.6

  1. Installez la version de CodeQL comme indiqué dans les étapes ci-dessus.

  2. Clonez et installez le référentiel Windows Driver Developer Supplemental Tools qui contient les requêtes CodeQL spécifiques pour les pilotes :

    git clone https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools.git --recurse-submodules

  3. Reportez-vous à la matrice des versions de publication du programme de compatibilité matérielle Windows pour identifier la bonne branche pour la version de Windows que vous souhaitez certifier.

  4. Utilisez la commande git checkout pour vérifier la branche identifiée.

  5. Confirmez que les sous-modules sont présents dans le répertoire codeql-home.

     D:/codeql-home
         |--- codeql
         |--- Windows-Driver-Developer-Supplemental-Tools
    
  6. Analysez votre base de données CodeQL.

    Met à jour cet exemple de commande pour correspondre à votre environnement. Définissez les paramètres, le chemin vers la nouvelle base de données, le format, le fichier de sortie sarif, le chemin vers la requête ou la suite de requêtes CodeQL à utiliser dans l’analyse.

    codeql database analyze <path to database> --format=sarifv2.1.0 --output=<"path to output file".sarif> <path to query/suite to run>

    Exemple :

    codeql database analyze D:\DriverDatabase --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif D:\codeql-home\Windows-driver-developer-supplemental-tools\src\suites\windows_driver_mustfix.qls

    Assurez-vous de vérifier le chemin de la suite ou de la requête que vous souhaitez exécuter, toutes les branches n’ont pas la même structure de fichiers.

  7. Reportez-vous à d’autres recommandations dans ce document pour les prochaines étapes comme la vérification et la soumission des résultats des tests.

4. Afficher et interpréter les résultats

Nous nous concentrerons sur le format SARIF pour cette section car il est nécessaire pour les étapes suivantes, bien que vous puissiez utiliser le format CSV s’il convient mieux à vos besoins.

Le format SARIF (Static Analysis Results Interchange Format) est un format de type JSON utilisé pour partager les résultats d’analyse statique. En savoir plus sur la norme au format SARIF (Static Analysis Results Interchange Format) oasis, comment CodeQL utilise la sortie SARIF et le json de schéma.

Il existe plusieurs méthodes pour interpréter les résultats de l’analyse comme le tri manuel des objets. En voici quelques-uns que nous utilisons :

  • Le Visualiseur Microsoft SARIF (Web) dispose d’une fonctionnalité qui vous permet de faire glisser et déposer votre fichier SARIF dans le visualiseur, puis affiche les résultats catégorisés par règle. C’est un moyen très rapide et facile de voir le nombre de violations ou quelles requêtes ont des violations, mais moins efficace pour trouver des informations sur le code source en dehors du numéro de ligne. Notez que la page ne se mettra pas à jour s’il n’y a pas de violations.

  • Le Visualiseur SARIF de Microsoft pour Visual Studio est idéal pour afficher les résultats dans Visual Studio pour une transition fluide des résultats au code source.

  • L’extension SARIF pour Visual Studio Code

La section la plus importante du fichier SARIF est la propriété « Results » à l’intérieur de l’objet « Run ». Chaque requête aura une propriété Results avec des détails sur les violations détectées et où elles se sont produites. Si aucune violation n’est trouvée, la valeur de la propriété sera vide.

Les requêtes sont classées en utilisant des statuts tels que « erreur », « avertissement » et « problème », mais cette classification est distincte de la manière dont le programme de compatibilité matérielle Windows et spécifiquement le test de logo des outils statiques évalueront les résultats. Tout pilote avec des défauts provenant de toute requête dans la suite « Must-Fix » ne passera pas le test de logo des outils statiques et sa certification échouera, quelle que soit la classification de la requête dans le fichier de requêtes brut (ex. « avertissement »).

5. Suppression des résultats CodeQL (facultatif)

CodeQL pour les pilotes prend en charge la suppression des résultats. Les suppressions sont actuellement fournies pour aider les développeurs à trier les problèmes et réduire le bruit, et non comme un moyen de contourner les vérifications « must-fix ». Elles n’ont aucun impact sur la génération d’un journal de vérification du pilote ou sur le passage du test de logo des outils statiques pour le moment. Pour utiliser les suppressions, vous devez exécuter la requête DriverAlertSuppression.ql en même temps que les autres requêtes ou suites que vous souhaitez exécuter. Par défaut, cette requête est activée lors de l’exécution de nos suites à partir de notre branche principale/développement github.

Pour les vérifications qui ont été portées de l’analyse de code, les suppressions existantes de l’analyse de code seront honorées. Pour plus d’informations, veuillez consulter la section la pragma d’avertissement C++.

  • Known limitation: Vous ne pouvez pas combiner un #pragma(disable) et #pragma(suppress) sur la même ligne pour le moment.

Pour les vérifications qui sont nouvelles pour CodeQL, vous pouvez les supprimer en faisant l’une des deux choses suivantes :

  • Écrivez une annotation « #pragma(suppress :the-rule-id-here) » (guillemets moins) sur la ligne au-dessus de la violation, comme vous le feriez pour l’analyse du code. « the-rule-id-here » peut être remplacé par la @id valeur dans les métadonnées d’une requête donnée, consultable en haut du fichier.

  • Écrivez un commentaire sur la ligne au-dessus composé du texte « lgtm[the-rule-id-here] » (sans guillemets). Vous devrez exécuter la requête standard de suppression d’alerte C/C++ au lieu de la requête de suppression d’alerte du pilote.

Une fois qu’une suppression est présente et reconnue, le fichier SARIF résultant inclut les données qu’un résultat a été supprimé, et la plupart des visionneuses de résultats n’affichent pas le résultat par défaut.

6. Convertir SARIF en format de journal de vérification du pilote (DVL)

Le test de logo des outils statiques analyse un Journal de vérification du pilote (DVL) qui est le résultat compilé de plusieurs moteurs d’analyse statique qui ont été exécutés sur le code source du pilote. Il existe trois façons de convertir votre fichier SARIF en format DVL, choisissez celle qui correspond le mieux à votre configuration.

Utilisation de Visual Studio (WDK Preview Build 20190 et et les versions supérieures)

  1. Placez votre fichier de résultats SARIF dans le même répertoire que votre fichier .vcxproj.
  2. Dans le menu de l’extension Driver, sélectionnez Créer un journal de vérification du pilote.
  3. Vérifiez que l’interface utilisateur du DVL détecte votre fichier SARIF.
    • Remarque : si vous avez déplacé votre fichier SARIF vers le répertoire .vcxproj en utilisant l’interface utilisateur de Visual Studio, il est possible que Visual Studio ait créé une référence au fichier SARIF au lieu de le déplacer réellement. Essayez d’ouvrir le répertoire en dehors de Visual Studio pour vous assurer qu’il existe réellement à cet emplacement.
  4. Sélectionnez Créer.

Utilisation de MSBuild

  1. Placez votre fichier de résultats SARIF dans le même répertoire que votre fichier .vcxproj.

  2. Ouvrez votre Invite de commandes Visual Studio, Invite de commandes Visual Studio Native Tools ou le Kit de développement Windows Enterprise (EWDK).

  3. Utilisez la commande msbuild avec les paramètres suivants :

    • chemin vers le fichier de projet vcx
    • /target:dvl
    • /p:Configuration="Release"
    • /P:Platform=<platform> (Utilisez uniquement l’une des chaînes suivantes : x86, x64, arm, arm64)

    msbuild.exe <vcxprojectfile> /target:dvl /p:Configuration="Release" /P:Platform=<platform>

Utilisation de CMD

  1. Localisez le fichier dvl.exe dans le WDK ou un EWDK monté.

  2. Utilisez l’exe avec les paramètres suivants :

    • /manualCreate
    • driver name (N’incluez pas le format de fichier .sys)
    • driver architecture (Utilisez uniquement l’une des chaînes suivantes : x86, x64, arm, arm64)

    "C:\Program Files (x86)\Windows Kits\10\Tools\dvl\dvl.exe" /manualCreate <driver name> <driver architecture>

Vous trouverez des instructions supplémentaires pour le test HLK du logo des outils statiques et des conseils sur l’endroit où placer le fichier DVL dans L’exécution du test.

7. Événement de post-génération de Visual Studio (facultatif)

Si vous construisez le pilote à l’aide de Visual Studio, vous pouvez configurer les requêtes CodeQL pour s’exécuter en tant qu’événement de post-build.

Dans cet exemple, un petit fichier batch est créé dans l’emplacement cible et appelé en tant qu’événement de post-génération. Pour plus d’informations sur les événements de build C++ de Visual Studio, veuillez consulter la Spécification des événements de build.

  1. Créez un petit fichier batch qui recrée la base de données CodeQL puis y exécute les requêtes désirées. Dans cet exemple, le fichier batch sera nommé RunCodeQLRebuildQuery.bat. Modifiez les chemins indiqués dans le fichier batch d’exemple pour correspondre à vos emplacements de répertoire.

    ECHO ">>> Running CodeQL Security Rule V 1.0 <<<"
    ECHO ">>> Removing previously created rules database <<<"
    rmdir /s/q C:\codeql-home\databases\kmdf
    CALL C:\codeql-home\codeql\codeql\codeql.cmd database create -l=cpp -s="C:\codeql-home\drivers\kmdf" -c "msbuild /p:Configuration=Release /p:Platform=x64 C:\codeql-home\drivers\kmdf\kmdfecho.sln /t:rebuild /p:PostBuildEventUseInBuild=false " "C:\codeql-home\databases\kmdf" -j 0
    CALL C:\codeql-home\codeql\codeql\codeql database analyze "C:\codeql-home\databases\kmdf" "C:\codeql-home\Windows-Driver-Developer-Supplemental-Tools\codeql\codeql-queries\cpp\ql\src\Likely Bugs\Underspecified Functions" --format=sarifv2.1.0 --output=C:\codeql-home\databases\kmdf.sarif -j 0 --rerun
    ECHO ">>> Loading SARIF Results in Visual Studio <<<"
    CALL devenv /Edit C:\codeql-home\databases\kmdf.sarif
    SET ERRORLEVEL = 0
    
  2. L’option devenv.exe / Edit est utilisée dans le fichier batch pour ouvrir le fichier de résultats SARIF dans l’instance existante de Visual Studio. Pour visualiser les résultats SARIF, installez le Visualiseur SARIF Microsoft pour Visual Studio et consultez les instructions fournies pour plus d’informations.

  3. Dans le projet de pilote, rendez-vous dans les propriétés du projet. Dans le menu déroulant Configuration, sélectionnez la configuration de build que vous souhaitez vérifier avec CodeQL, nous recommandons « Release ». La création de la base de données CodeQL et l’exécution des requêtes prend quelques minutes, nous vous déconseillons donc d’exécuter CodeQL sur la configuration Debug de votre projet.

  4. Sélectionnez Événements de build et Événement de post-build dans les propriétés du projet de pilote.

  5. Fournissez un chemin vers le fichier batch et une description de l’événement de post-build.

Configuration de l’événement de post-build de Visual Studio montrant un fichier batch configuré comme option de ligne de commande.

  1. Les résultats de l’exécution du fichier batch seront affichés à la fin de la sortie de build.

    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.ql.
    1>[1/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.bqrs.
    1>[2/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.bqrs.
    1>[3/4 eval 4.5s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.bqrs.
    1>[4/4 eval 5.2s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.bqrs.
    1>Shutting down query evaluator.
    1>Interpreting results.
    1>">>> Loading SARIF Results in Visual Studio <<<"
    

Dépannage

Si vous certifiez à l'aide de WHCP, assurez-vous d'abord d’utiliser la version HLK associée à la version de Windows que vous ciblez, la branche associée dans le référentiel Outils supplémentaires du développeur de pilotes Windows, et la version ultérieure de CodeQL CLI. Pour la matrice de compatibilité HLK/Windows Release, veuillez consulter Windows Hardware Lab Kit et pour obtenir des détails sur la compatibilité entre les versions de Windows, les branches du référentiel Windows Driver Developer Supplemental Tools, et les versions de CodeQL CLI, veuillez consulter le tableau WHCP dans la section Configuration de CodeQL.

Erreurs et solutions alternatives

Pour les problèmes d’incompatibilité des versions de base de données, les outils suivants peuvent s’avérer utiles.

Utilisez la commande codeql version pour afficher la version de l’exécutable codeql.

C:\codeql-home\codeql\>codeql version
CodeQL command-line toolchain release 2.4.0.
Copyright (C) 2019-2020 GitHub, Inc.
Unpacked in: C:\codeql-home\codeql\
   Analysis results depend critically on separately distributed query and
   extractor modules. To list modules that are visible to the toolchain,
   use 'codeql resolve qlpacks' and 'codeql resolve languages'.

La commande database upgrade mettra à jour une base de données. Sachez que c’est une mise à niveau unidirectionnelle et non réversible. Pour plus d’informations, veuillez consulter la mise à niveau de la base de données.

Requêtes et suites

Dans le cadre du Référentiel GitHub Microsoft CodeQL, nous fournissons deux suites de requêtes pour simplifier le flux de travail de bout en bout des développeurs de pilotes. La suite de requêtes windows_driver_recommended.qls est un ensemble de toutes les requêtes que Microsoft a jugées utiles pour les développeurs de pilotes. La suite de requêtes windows_driver_mustfix.qls contient des requêtes jugées « Must-Fix » pour la certification WHCP, qui doivent être exécutées et réussies pour passer le test STL (Static Tools Logo). Les suites de requêtes Must-Fix et Recommandées sont régulièrement mises à jour.

Requêtes Must-Fix

Le sous-ensemble de requêtes ci-dessous est un Must-Fix pour la certification WHCP et est également inclus dans la suite de correction Recommandée.

Cet ensemble de règles est inclus dans windows_driver_mustfix.qls.

id Emplacement Common Weakness Enumeration (CWE)
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql S/O
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql S/O
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253

Le fichier windows_driver_mustfix.qls contient ces requêtes de code.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Security queries required to fix when certifying Windows Drivers
- queries: . 
  from: codeql/cpp-queries
  version: 0.9.0
- include:
    query path: 
      - Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
      - Likely Bugs/Memory Management/PointerOverflow.ql
      - Likely Bugs/Underspecified Functions/TooFewArguments.ql
      - Security/CWE/CWE-190/ComparisonWithWiderType.ql
      - Security/CWE/CWE-253/HResultBooleanConversion.ql
- import: windows-driver-suites/windows_mustfix_partial.qls
  from: microsoft/windows-drivers

Cet ensemble de règles est inclus dans windows-driver-suites/windows_mustfix_partial.qls.

id Emplacement Common Weakness Enumeration (CWE)
cpp/windows/wdk/deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql S/O
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Le fichier windows_mustfix_partial.qls contient ces requêtes de code.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Security queries required to fix when certifying Windows Drivers
- queries: .
  from: microsoft/windows-drivers
- include:
    query path: 
      - drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql
      - microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql

Ces requêtes font partie de la suite de requêtes windows_driver_recommended.qls dans le référentiel Microsoft GitHub CodeQL. La colonne « Common Weakness Enumeration » (CWE) spécifie les types de problèmes de sécurité recherchés par la requête donnée. Pour plus d’informations sur les CWE, veuillez consulter la page concernant CWE sur le site de Mitre .

Meilleures pratiques

id Emplacement Common Weakness Enumeration (CWE)
cpp/offset-use-before-range-check codeql/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql S/O

Bugs probables

id Emplacement Common Weakness Enumeration (CWE)
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/integer-multiplication-cast-to-long codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
cpp/signed-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql S/O
cpp/upcast-array-pointer-arithmetic codeql/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql S/O
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql S/O
cpp/incorrect-not-operator-usage codeql/cpp-queries/<Version>/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/SuspiciousSizeof.ql CWE-468
cpp/uninitialized-local codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665

Sécurité

id Emplacement Common Weakness Enumeration (CWE)
cpp/conditionally-uninitialized-variable codeql/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. CWE-457
cpp/unterminated-variadic-call codeql/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/suspicious-pointer-scaling codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/suspicious-pointer-scaling-void codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/potentially-dangerous-function codeql/cpp-queries/<Version>/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/incorrect-string-type-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Security/CWE/CWE-468/CWE-468/SuspiciousAddWithSizeof.ql CWE-468

Le fichier windows_driver_recommended.qls contient ces requêtes de code recommandées.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
  from: microsoft/windows-drivers
- import: windows-driver-suites/windows_recommended_partial.qls
  from: microsoft/windows-drivers
- queries: . 
  from: codeql/cpp-queries
  version: 0.9.0
- include:
    query path: 
      - Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql
      - Likely Bugs/Arithmetic/IntMultToLong.ql
      - Likely Bugs/Arithmetic/SignedOverflowCheck.ql
      - Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
      - Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql
      - Likely Bugs/Memory Management/SuspiciousSizeof.ql
      - Likely Bugs/Memory Management/UninitializedLocal.ql
      - Security/CWE/CWE-121/UnterminatedVarargsCall.ql
      - Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql
      - Security/CWE/CWE-468/IncorrectPointerScaling.ql
      - Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql
      - Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
      - Security/CWE/CWE-676/PotentiallyDangerousFunction.ql
      - Security/CWE/CWE-704/WcharCharConversion.ql
      - Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
      - Likely Bugs/Memory Management/PointerOverflow.ql
      - Likely Bugs/Underspecified Functions/TooFewArguments.ql
      - Security/CWE/CWE-190/ComparisonWithWiderType.ql
      - Security/CWE/CWE-253/HResultBooleanConversion.ql

Ces requêtes font partie de windows_recommended_partial.qls.

id Emplacement Common Weakness Enumeration (CWE)
cpp/paddingbyteinformationdisclosure microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql S/O
cpp/badoverflowguard microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql S/O
cpp/infiniteloop microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql S/O
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql S/O
cpp/use-after-free microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql S/O
id Emplacement Avertissement concernant l’analyse du code
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Crytpography/HardcodedIVCNG.ql S/O

Pilotes - Général

id Emplacement Avertissement concernant l’analyse du code
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Aucune vérification d’autorité de certification associée
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Aucune vérification d’autorité de certification associée
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql Avertissement C28719, Avertissement C28726, Avertissement C28735, Avertissement C28750
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Avertissement C28158
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql Avertissement C28157
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql Avertissement C28150
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Avertissement C28120
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql Avertissement C28121
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Avertissement C28124
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql Avertissement C28134
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql Avertissement C28146

Pilotes - WDM

id Emplacement Avertissement concernant l’analyse du code
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Avertissement C28128
cpp/drivers/illegal-field-access2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Avertissement C28175
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Avertissement C28176
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (Aucune vérification d’autorité de certification associée)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql Avertissement C28145
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Avertissement C28143
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Avertissement C28169

Le fichier windows-driver-suites/windows_recommended_partial.qls contient ces requêtes de code recommandées.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
- queries: .
  from: microsoft/windows-drivers
- include:
    query path: 
      - microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql
      - microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql
      - microsoft/Likely Bugs/Conversion/InfiniteLoop.ql
      - microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql
      - microsoft/Likely Bugs/UninitializedPtrField.ql
      - microsoft/Security/Crytpography/HardcodedIVCNG.ql
      - drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql
      - drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql
      - drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql
      - drivers/general/queries/ExaminedValue/ExaminedValue.ql
      - drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql
      - drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql
      - drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql
      - drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql
      - drivers/general/queries/IrqlTooLow/IrqlTooLow.ql
      - drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql
      - drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql
      - drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql
      - drivers/general/queries/StrSafe/StrSafe.ql
      - drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql
      - drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql
      - drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql
      - drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql
      - drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql
      - drivers/wdm/queries/PendingStatusError/PendingStatusError.ql
      - drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql

Forums Aux Questions (FAQ)

Quand cela sera-t-il nécessaire pour la certification des appareils ?

Pour plus d’informations concernant les conditions requises, veuillez consulter le processus de certification du programme de compatibilité matérielle Windows.

Quelle est l’intention de l’exécution de CodeQL sur le code source du pilote ?

L’exécution de CodeQL sur le code source du pilote est principalement motivée par deux raisons :

  1. La sécurité de Windows est primordiale et exiger que CodeQL soit exécuté sur le code source du pilote est une étape nécessaire pour améliorer la sécurité des composants certifiés par Microsoft.
  2. Les requêtes CodeQL sont développées activement par les ingénieurs de sécurité de Microsoft, car Microsoft s’engage à s’assurer que son écosystème matériel bénéficie des mêmes outils de haute qualité utilisés chez Microsoft.

Quels types de pilotes le test du CodeQL et le test du logo Static Tools appliquent-ils ?

À l’heure actuelle, le test du logo Static Tools nécessite l’exécution de CodeQL et l’ensemble de requêtes « À corriger impérativement » transmis pour tous les pilotes en mode noyau, à l’exclusion des pilotes graphiques. Notez que l’exécution de CodeQL sur les pilotes graphiques est vivement recommandée même si elle n’est pas requise actuellement. Certaines requêtes peuvent également trouver des défauts utiles dans les composants en mode utilisateur.

Nous prévoyons d’étendre le test et ses requêtes pour exiger des résultats pour les pilotes graphiques, les pilotes en mode utilisateur et les composants de pilotes, ainsi que d’autres composants de package de pilotes à l’avenir. Si vous constatez un comportement inattendu ou des faux positifs exécutant CodeQL sur des pilotes graphiques ou des pilotes en mode utilisateur, signalez le problème sur le référentiel Windows-Driver-Developer-Supplemental-Tools.

Quelle licence régit l’utilisation de CodeQL pour les développeurs de pilotes ?

L’utilisation de CodeQL à des fins de test WHCP est acceptable dans le cadre du Contrat de licence utilisateur final de HLK (Hardware Lab Kit). Pour les participants au WHCP, le CLUF du HLK remplace les Conditions générales d’utilisation de CodeQL de GitHub. L’EULA (termes du contrat de licence) de HLK indique que CodeQL peut être utilisé pour l’analyse automatisée, l’intégration continue ou le déploiement continu, dans le cadre des processus d’ingénierie classiques dans le but d’analyser les pilotes à soumettre et à certifier dans le cadre du WHCP.

Dois-je utiliser Visual Studio ou msbuild pour exécuter CodeQL ?

CodeQL n’exige pas l’utilisation de MSBuild ou de Visual Studio. Veuillez consulter les langages et frameworks pris en charge pour obtenir une liste des compilateurs pris en charge.

Comment le HLK vérifie-t-il que mon pilote a été analysé par CodeQL ?

Le test du logo des outils statiques dans le HLK est le test qui impose cette exigence. Les détails sur le test du logo des outils statiques peuvent être trouvés sur sa page de documentation Microsoft.

Tous les défauts signalés par CodeQL sont-ils des défauts réels ?

Chaque requête CodeQL a des niveaux de précision variables. Notre objectif est de minimiser les faux positifs, mais ils surviendront occasionnellement. Notre suite de requêtes « Must-Fix » a été développée et choisie à la main pour être utilisée avec le programme WHCP, car nos tests approfondis entraînent près de zéro faux positifs. Si vous voyez des faux positifs provenant d’une requête dans l’ensemble des requêtes « Must-Fix », envoyez immédiatement un e-mail à stlogohelp@microsoft.com ou signalez un problème sur le dépôt Windows-Driver-Developer-Supplemental-Tools, et nous nous efforcerons de le résoudre dès que possible.

La classification d’une requête en « avertissement » ou « erreur » est-elle importante par rapport au test du logo des outils statiques ?

Les requêtes sont classées en utilisant des statuts tels que « erreur », « avertissement » et « problème » dan CodeQL, mais cette classification est distincte de la manière dont le programme de compatibilité matérielle Windows et spécifiquement le test de logo des outils statiques évalueront les résultats. Tout pilote avec des défauts provenant de toute requête dans la suite « Must-Fix » ne passera pas le test de logo des outils statiques et sa certification échouera, quelle que soit la classification de la requête dans le fichier de requêtes brut (ex. « avertissement »).

Puis-je générer un DVL sur des solutions Visual Studio ?

Non, la génération de DVL doit être exécutée au niveau du projet et ne peut pas être exécutée sur des solutions Visual Studio. Les instructions pour générer un DVL se trouvent dans la section : Création d’un journal de vérification du pilote.

Puis-je générer un journal de vérification de pilote (DVL) en dehors du contexte de msbuild ou de Visual Studio ?

Dans le cadre du Windows Driver Kit (WDK) et de l’Enterprise WDK (eWDK), Microsoft propose un composant appelé dvl.exe qui peut être utilisé pour générer des journaux de vérification de pilote (DVL). À partir des versions préliminaires de WDK/eWDK 21342 et des versions ultérieures, il est possible de générer un DVL en ligne de commande en dehors du contexte de msbuild ou de Visual Studio en passant un nom de pilote et une architecture. Veuillez consulter la Création d’un journal de vérification du pilote pour plus de détails.

J’ai des commentaires ou des questions sur la façon d’utiliser CodeQL sur mon pilote, où puis-je envoyer des commentaires ?

Veuillez envoyer vos commentaires et questions sur stlogohelp@microsoft.com.