Condividi tramite


Test del logo codeQL e static tools

Sicurezza codeQL e driver

Microsoft si impegna a mitigare la superficie di attacco per il sistema operativo Windows e a garantire che i driver di terze parti soddisfino una barra di sicurezza avanzata sia fondamentale per raggiungere tale obiettivo. Un passaggio nell'impostazione di questa barra di sicurezza è il requisito del Programma di compatibilità hardware Windows (WHCP) che indica che tutti gli invii di driver devono usare il motore CodeQL nel codice sorgente del driver e correggere eventuali violazioni considerate "Must-Fix".

CodeQL, di GitHub, è un potente motore di analisi del codice semantico e la combinazione di una vasta gamma di query di sicurezza di alto valore insieme a una solida piattaforma lo rendono uno strumento prezioso per la protezione del codice driver.

L'utilizzo di CodeQL ai fini dei test WHCP è accettabile nel Contratto di licenza per l'utente finale di Hardware Lab Kit (HLK). Per i partecipanti a WHCP, l'EULA di HLK sovrascrive i termini e le condizioni di CodeQL di GitHub indicando che CodeQL può essere usato durante l'analisi automatizzata, l'integrazione continua o la distribuzione continua, come parte dei normali processi di progettazione ai fini dell'analisi dei driver da inviare e certificati come parte del WHCP.

Il requisito di analizzare il codice sorgente del driver e correggere eventuali violazioni "Must-Fix" verrà applicato dal test del logo degli strumenti statici.

In questo argomento viene spiegato come:

  • Usare CodeQL per analizzare il codice sorgente del driver per individuare problemi noti di sicurezza ad alto impatto.
  • Verificare che il test del logo degli strumenti statici possa utilizzare i risultati dell'esecuzione di CodeQL.
  • Determinare quali query "Must-Fix" devono essere eseguite per la certificazione WHCP.

Importante

Il programma di compatibilità hardware Windows richiede codeQL per i test STL (Static Tool Logo) nei sistemi operativi client e server. Continueremo a mantenere il supporto per SDV e CA su prodotti meno recenti. I partner sono invitati a esaminare i requisiti codeQL per il test del logo dello strumento statico.

EULA HLK e CodeQL

L'utilizzo di CodeQL allo scopo di certificare per il test del programma di compatibilità hardware Windows è accettabile nel Contratto di licenza per l'utente finale di Hardware Lab Kit (HLK ). Per i partecipanti a WHCP, il contratto di licenza di HLK sovrascrive i termini e le condizioni di CodeQL di GitHub. Il contratto di licenza HLK indica che CodeQL può essere usato durante l'analisi automatizzata, CI o CD, come parte dei normali processi di progettazione ai fini dell'analisi dei driver da inviare e certificati come parte del Programma di compatibilità hardware di Windows. Per gli utenti che seguono per l'uso generale, leggere i termini e le condizioni di GitHub CodeQL e/o contattare CodeQL.

Concetti relativi a CodeQL

CodeQL è un motore di analisi statico usato dagli sviluppatori per eseguire l'analisi della sicurezza sul codice all'esterno di un ambiente live. CodeQL inserisce il codice durante la compilazione e compila un database da esso. Il database diventa una directory contenente dati su cui è possibile eseguire query, un riferimento all'origine e file di log. Una volta compilato il database, è possibile eseguirne l'analisi usando query CodeQL (denominate anche controlli o regole) che determineranno se il codice sorgente contiene violazioni o vulnerabilità di sicurezza. CodeQL offre una libreria di query standard che controllano la correttezza del linguaggio, la semantica e offrono un ottimo valore per gli sviluppatori che vogliono garantire che il codice sia privo di bug e vulnerabilità.

CodeQL offre anche l'opzione per compilare query personalizzate. Per altre informazioni sulla scrittura di query personalizzate, vedere Scrittura di query nella documentazione codeQL.

CodeQL fornisce anche uno strumento da riga di comando CodeQL per eseguire facilmente azioni CodeQL e/o eseguire analisi su larga scala.

La documentazione supplementare dell'interfaccia della riga di comando di CodeQL è disponibile in Introduzione a CodeQL.

1. Installazione di CodeQL

Per l'uso del programma di compatibilità hardware di Windows

Matrice di versione del programma di compatibilità hardware Windows

Usare questa matrice per determinare le versioni da scaricare.

Versione di Windows Versione dell'interfaccia della riga di comando codeQL versione QL Pack microsoft/windows-drivers codeql/cpp-queries Versione QL Pack Ramo da usare
Windows Server 2022 2.4.6 o 2.15.4 1.0.13 (se si usa codeql 2.15.4) 0.9.0 (se si usa codeql 2.15.4) WHCP_21H2
Windows 11 2.4.6 o 2.15.4 1.0.13 (se si usa codeql 2.15.4) 0.9.0 (se si usa codeql 2.15.4) WHCP_21H2
Windows 11, versione 22H2 2.6.3 o 2.15.4 1.0.13 (se si usa codeql 2.15.4) 0.9.0 (se si usa codeql 2.15.4) WHCP_22H2
Windows 11, versione 23H2 2.6.3 o 2.15.4 1.0.13 (se si usa codeql 2.15.4) 0.9.0 (se si usa codeql 2.15.4) WHCP_22H2
Windows 11, versione 24H2 2.15.4 1.1.0 0.9.0 WHCP_24H2

Una versione del pacchetto QL non è specificata per CodeQL CLI 2.4.6 e 2.6.3 perché solo le versioni più recenti di CodeQL supportano i pacchetti QL.

Per uso generico

Per l'uso generale di CodeQL con altre versioni di Windows al di fuori del programma WHCP o per lo sviluppo e il test di query, è attualmente consigliabile usare la versione e il ramo seguenti:

Versione dell'interfaccia della riga di comando codeQL microsoft/windows-drivers qlpack versione codeql/cpp-queries version Ramo da usare
2.15.4 più recente più recente main

Scaricare e installare CodeQL

Nota

Visual Studio 17.8 ha interrotto la compatibilità con le versioni precedenti di CodeQL usate nei rami WHCP_21H2 e WHCP_22H2. L'interfaccia della riga di comando codeQL versione 2.15.4 è stata convalidata per l'uso con WHCP 21H2 e WHCP 22H2 quando si usa Visual Studio 17.8 o versione successiva. Per il programma WHCP, usare la versione dell'interfaccia della riga di comando codeQL in base alla tabella precedente e alla versione di Windows per cui si sta certificando - versione 2.4.6, versione 2.6.3 o versione 2.15.4. Per l'uso generale con il ramo principale, usare l'interfaccia della riga di comando codeQL versione 2.15.4.

  1. Creare una directory per contenere CodeQL. Questo esempio usa C:\codeql-home\

    C:\> mkdir C:\codeql-home
    
  2. Fare riferimento alle tabelle precedenti per selezionare la versione dell'interfaccia della riga di comando codeQL da usare in base al ramo desiderato delle query sui driver di Microsoft. Se si esegue l'analisi come parte del programma WHCP, fare riferimento alla tabella Per l'uso del programma di compatibilità hardware di Windows in caso contrario usare Main Branch e 2.15.4. L'uso di una versione diversa può comportare un database incompatibile con le librerie.

  3. Passare alla versione dei file binari dell'interfaccia della riga di comando codeQL associata alle tabelle precedenti e scaricare il file ZIP in base all'architettura del progetto. Ad esempio, per Windows a 64 bit "codeql-win64.zip".

  4. Estrarre la directory dell'interfaccia della riga di comando codeql in quella appena creata, ad esempio C:\codeql-home\codeql.

  5. Verificare che CodeQL sia installato correttamente controllando la versione:

     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. Il comando della Guida visualizza le informazioni sull'utilizzo della riga di comando.

    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.
    

Installare pacchetti CodeQL

Per i rami WHCP_21H2 e WHCP_22H2

Se si usa Visual Studio 2022 17.8 o versione successiva con WHCP_21H2 o WHCP_22H2 e l'interfaccia della riga di comando codeQL versione 2.15.4:

  • Seguire la procedura per "TUTTI GLI ALTRI RAMI".
  • Assicurarsi di rimuovere il modulo secondario CodeQL se è ancora presente una versione precedente del repository clonato. CodeQL potrebbe provare a usare le query nel modulo secondario per impostazione predefinita, causando errori a causa di versioni non corrispondenti.

Se si usa Visual Studio versione 17.7 o successiva , AND WHCP_21H2 o WHCP_22H2 AND CodeQL CLI versione 2.4.6 o 2.6.3:

  • Seguire le istruzioni speciali per WHCP_21H2 e WHCP_22H2 usando VS17.7 o versioni precedenti .

TUTTI GLI ALTRI RAMI

Scaricare i pacchetti di query CodeQL

Non è più necessario clonare il repository Windows-Driver-Developer-Supplemental-Tools per usare le query per la certificazione. I pacchetti CodeQL ("Pacchetti QL" o "Query Pack") vengono ora usati.

  1. Scaricare la versione corretta del pacchetto microsoft/windows-drivers dalla matrice di versione del programma di compatibilità hardware windows. @<version> Specificare nel comando seguente.
C:\codeql-home\> codeql pack download microsoft/windows-drivers@<version>

Ad esempio, se si usa WHCP_24H2, eseguire il comando seguente per scaricare il pacchetto di query 1.1.0 windows-drivers:

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

Usare questo comando per scaricare la versione 0.9.0 del pacchetto di query codeQL cpp-querys.

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

È possibile ignorare il passaggio precedente, perché l'opzione --download scaricherà le query necessarie più avanti nel processo di analisi.

CodeQL installa i Query Pack scaricati nella directory predefinita:

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

Non modificare questa directory o spostare il pacchetto installato.

Scaricare i pacchetti di query dei driver di Windows

Individuare e copiare nel PC locale i due file principali della suite di query.

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

Il contenuto è illustrato di seguito in Query e suite; i due file si trovano in https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/main/suites

2. Compilare il database CodeQL

Questi esempi presuppongono l'uso di un ambiente di sviluppo Windows e che il percorso di installazione sia C:\codeql-home, ma è possibile usare la configurazione appropriata. Per un elenco dei compilatori supportati, vedere Linguaggi e framework supportati da CodeQL.

  1. Creare una directory per CodeQL per inserire i database creati. Ad esempio: C:\codeql-home\databases

    mkdir C:\codeql-home\databases
    
  2. Usare il comando CodeQL per creare un database usando i parametri seguenti:

    • il primo parametro è un collegamento alla directory del database. Ad esempio: C:\codeql-home\databases\MyDriverDatabase (questo comando avrà esito negativo se la directory esiste già).
    • --language oppure -l è il linguaggio o le lingue in cui si trova il codice sorgente (può essere un elenco delimitato da virgole, ad esempio [cpp, javascript]).
    • -- source o -s è il percorso del codice sorgente.
    • --command oppure -c è il comando di compilazione o il percorso del file di compilazione.
    codeql database create <database directory> --language=<language> --source=<path to source code> --command=<build command or path to build file>
    

Esempi

Esempio di driver singolo.

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"

Esempio di più driver.

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

Per altre informazioni o informazioni sull'uso del database create comando, passare a Creazione di database CodeQL o usare il comando seguente:

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

3. Eseguire l'analisi

Nota

Se si usa Visual Studio versione 17.7 o successiva , AND WHCP_21H2 o WHCP_22H2 AND CodeQL VLI versione 2.4.6 o 2.6.3, seguire le istruzioni speciali per WHCP_21H2 e WHCP_22H2 usando VS17.7 o versioni precedenti .

A questo punto, la configurazione è completa e il passaggio successivo consiste nell'eseguire l'analisi effettiva sul codice sorgente del driver.

  1. Usare il comando CodeQL per analizzare il database usando i parametri seguenti:

    • il primo parametro è un collegamento alla directory del database. Ad esempio: C:\codeql-home\databases\MyDriverDatabase. Questo comando avrà esito negativo se la directory non esiste.
    • --download flag indica a CodeQL di scaricare le dipendenze prima di eseguire le query.
    • --format è il tipo di file di output. Le opzioni includono: SARIF e CSV. Per gli utenti WHCP usa il formato SARIF.
    • --output è il percorso in cui si desidera il file di output, assicurarsi di includere il formato nel nome del file. Questo comando avrà esito negativo se la directory non esiste già.
    • Il parametro degli identificatori di query è un elenco separato da spazi di argomenti che possono includere:
      • percorso di un file di query
      • percorso di una directory contenente i file di query
      • percorso di un file della suite di query
      • nome di un pacchetto di query CodeQL
    codeql database analyze --download <path to database> <path to query suite .qls file> --format=sarifv2.1.0 --output=<outputname>.sarif
    

    Esempio:

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

    Per altre informazioni o informazioni sull'uso del database analyze comando, vedere Analisi dei database con l'interfaccia della riga di comando di CodeQL e Uso di un pacchetto CodeQL per analizzare un database CodeQL.

    Per la Guida della riga di comando, usare il comando seguente:

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

Istruzioni speciali per WHCP_21H2 e WHCP_22H2 con VS17.7 o versioni precedenti

Queste istruzioni si applicano solo quando si usano Visual Studio 17.7 o versioni precedenti, insieme a CodeQL 2.6.3 o 2.4.6

  1. Installare la versione codeQL come indicato nei passaggi precedenti.

  2. Clonare e installare il repository degli strumenti aggiuntivi per sviluppatori di Driver Windows che contiene le query CodeQL specifiche per i driver:

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

  3. Fare riferimento alla matrice della versione del programma di compatibilità hardware di Windows per identificare il ramo corretto per la versione di Windows per cui si vuole certificare.

  4. Usare il git checkout comando per estrarre il ramo identificato.

  5. Verificare che i moduli secondari siano presenti nella directory codeql-home.

     D:/codeql-home
         |--- codeql
         |--- Windows-Driver-Developer-Supplemental-Tools
    
  6. Analizzare il database CodeQL.

    Aggiornare questo comando di esempio in modo che corrisponda all'ambiente in uso. Impostare i parametri, il percorso del nuovo database, il formato, il file sarif di output, il percorso della query CodeQL o del gruppo di query da usare nell'analisi.

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

    Esempio:

    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

    Assicurarsi di controllare il percorso della suite o della query che si vuole eseguire, non tutti i rami hanno la stessa struttura di file.

  7. Fare riferimento ad altre indicazioni in questo documento per i passaggi successivi, ad esempio la revisione e l'invio dei risultati dei test.

4. Visualizzare e interpretare i risultati

Ci concentreremo sul formato SARIF per questa sezione perché è ciò che è necessario per i passaggi seguenti, anche se si è invitati a usare il formato CSV se si adatta meglio alle proprie esigenze.

Static Analysis Results Interchange Format (SARIF) è un formato di tipo JSON usato per la condivisione dei risultati dell'analisi statica. Altre informazioni sullo standard in OASIS Static Analysis Results Interchange Format (SARIF), sul modo in cui CodeQL usa l'output SARIF e il codice JSON dello schema.

Esistono diversi metodi per interpretare i risultati dell'analisi, tra cui l'ordinamento manuale degli oggetti. Ecco alcuni esempi usati:

  • Microsoft Sarif Viewer (Web) include funzionalità che consentono di trascinare e rilasciare il file SARIF nel visualizzatore, quindi visualizzare i risultati classificati per regola. Si tratta di un modo molto rapido e semplice per vedere il numero di violazioni o quali query hanno violazioni, ma meno facile trovare informazioni sul codice sorgente a parte il numero di riga. Si noti che la pagina non verrà aggiornata se non sono presenti violazioni.

  • Microsoft SARIF Viewer per Visual Studio è ideale per visualizzare i risultati all'interno di Visual Studio per passare facilmente dai risultati al codice sorgente.

  • Estensione SARIF per Visual Studio Code

La sezione più importante del file SARIF è la proprietà "Results" all'interno dell'oggetto "Run". Ogni query avrà una proprietà Results con informazioni dettagliate sulle violazioni rilevate e sulla posizione in cui si è verificata. Se non vengono trovate violazioni, il valore della proprietà sarà vuoto.

Le query vengono classificate usando stati quali "error" "warning" e "problem", ma questa classificazione è separata dal modo in cui il programma di compatibilità hardware di Windows e in particolare il test del logo degli strumenti statici classifica i risultati. Tutti i driver con difetti di qualsiasi query all'interno della suite "Must-Fix" non supereranno il test del logo degli strumenti statici e non saranno certificati, indipendentemente dalla classificazione delle query nel file di query non elaborato (ad esempio "avviso").

5. Eliminazione dei risultati codeQL (facoltativo)

CodeQL per i driver supporta l'eliminazione dei risultati. Le eliminazioni sono attualmente disponibili come comodità per aiutare gli sviluppatori a valutare i problemi e ridurre il rumore, non come un modo per ignorare i controlli must-fix. Al momento non hanno alcun impatto sulla generazione di un log di verifica del driver o sul superamento del test del logo degli strumenti statici. Per usare le eliminazioni, è necessario eseguire la query DriverAlertSuppression.ql contemporaneamente alle altre query o gruppi da eseguire. Per impostazione predefinita, questa query è abilitata quando si eseguono le suite dal ramo principale/sviluppo di GitHubs.

Per i controlli che sono stati trasferiti dall'analisi del codice, verranno rispettate le eliminazioni di analisi del codice esistenti. Per altre informazioni, vedere Pragma di avviso C++.

  • Known limitation: Non è possibile combinare una #pragma(disable) e #pragma(suppress) nella stessa riga al momento.

Per i controlli nuovi di CodeQL, è possibile eliminarli eseguendo una delle due operazioni seguenti:

  • Scrivere un'annotazione "#pragma(suppress:the-rule-id-here)" (meno virgolette) nella riga precedente alla violazione, come si farebbe per l'analisi del codice. "the-rule-id-here" può essere sostituito dal @id valore nei metadati di una determinata query, visualizzabile all'inizio del file.

  • Scrivere un commento sulla riga precedente costituita dal testo "lgtm[the-rule-id-here]" (virgolette meno). È necessario eseguire la query di eliminazione degli avvisi C/C++ standard anziché la query di eliminazione degli avvisi del driver.

Una volta presente e riconosciuta un'eliminazione, il file SARIF risultante includerà i dati che un risultato è stato eliminato e la maggior parte dei visualizzatori dei risultati non mostrerà il risultato per impostazione predefinita.

6. Convertire SARIF in driver Verification Log Format (DVL)

Il test del logo degli strumenti statici analizza un log di verifica del driver (DVL) che è i risultati compilati di diversi motori di analisi statici che sono stati eseguiti nel codice sorgente del driver. Esistono tre modi per convertire il file SARIF in formato DVL, selezionare quello più adatto alla configurazione.

Uso di Visual Studio (WDK Preview Build 20190 e versioni seguenti)

  1. Posizionare il file dei risultati SARIF nella stessa directory del file .vcxproj.
  2. Dal menu Estensione driver selezionare Crea log di verifica driver.
  3. Verificare che l'interfaccia utente DVL rilevi il file SARIF.
    • Nota: se il file SARIF è stato spostato nella directory .vcxproj usando l'interfaccia utente di Visual Studio, è possibile che Visual Studio crei un riferimento al file SARIF invece di spostarlo effettivamente. Provare ad aprire la directory all'esterno di Visual Studio per assicurarsi che esista effettivamente.
  4. Seleziona Crea.

Uso di MSBuild

  1. Posizionare il file dei risultati SARIF nella stessa directory del file .vcxproj.

  2. Aprire il prompt dei comandi di Visual Studio, il prompt dei comandi di Visual Studio Native Tools o Enterprise Windows Driver Kit (EWDK).

  3. Usare il comando msbuild con i parametri seguenti:

    • percorso del file di progetto vcx
    • /target:dvl
    • /p:Configuration="Release"
    • /P:Platform=<platform> (Usare solo una delle stringhe seguenti: x86, x64, arm, arm64)

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

Uso di CMD

  1. Individuare il dvl.exe da WDK o da un eWDK montato.

  2. Usare l'exe con i parametri seguenti:

    • /manualCreate
    • driver name (Non includere il formato di file .sys)
    • driver architecture (Usare solo una delle stringhe seguenti: x86, x64, arm, arm64)

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

Altre istruzioni per il test HLK del logo degli strumenti statici e le indicazioni su dove inserire il file DVL sono disponibili in Esecuzione del test.

7. Evento post-compilazione di Visual Studio (facoltativo)

Se si compila il driver usando Visual Studio, è possibile configurare query CodeQL da eseguire come evento di post-compilazione.

In questo esempio viene creato un piccolo file batch nel percorso di destinazione e chiamato come evento di post-compilazione. Per altre informazioni sugli eventi di compilazione di Visual Studio C++, vedere Specifica degli eventi di compilazione.

  1. Creare un piccolo file batch che ricrea il database CodeQL e quindi esegue le query desiderate. In questo esempio il file batch verrà denominato RunCodeQLRebuildQuery.bat. Modificare i percorsi visualizzati nel file batch di esempio in modo che corrispondano ai percorsi della directory.

    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'opzione devenv.exe/Modifica viene usata nel file batch per aprire il file dei risultati SARIF nell'istanza esistente di Visual Studio. Per visualizzare i risultati SARIF, installare Microsoft SARIF Viewer per Visual Studio e fare riferimento alle istruzioni disponibili per altre informazioni.

  3. Nel progetto driver passare alle proprietà del progetto. Nell'elenco a discesa Configurazione selezionare la configurazione di compilazione da controllare con CodeQL. È consigliabile usare "Release". La creazione del database CodeQL e l'esecuzione delle query richiede alcuni minuti, pertanto non è consigliabile eseguire CodeQL nella configurazione di debug del progetto.

  4. Selezionare Eventi di compilazione e evento post-compilazione nelle proprietà del progetto driver.

  5. Specificare un percorso del file batch e una descrizione dell'evento di post-compilazione.

Configurazione dell'evento di post-compilazione di Visual Studio che mostra un file batch configurato come opzione della riga di comando.

  1. I risultati dell'esecuzione del file batch verranno visualizzati alla fine dell'output di compilazione.

    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 <<<"
    

Risoluzione dei problemi

Se si esegue la certificazione con WHCP, assicurarsi prima di tutto di usare la versione HLK associata alla versione di Windows di destinazione, il ramo associato nel repository degli strumenti supplementari per sviluppatori di Driver Windows e la versione successiva dell'interfaccia della riga di comando di CodeQL. Per la matrice di compatibilità HLK/Windows Release, vedi Windows Hardware Lab Kit e per Windows Release/Windows Driver Developer Supplemental Tools repo branch/CodeQL CLI version,see the WHCP table in the CodeQL Setup section.For HLK/Windows Release Supplemental Tools version, see the WHCP table in the CodeQL Setup section.

Errori e soluzioni alternative

Per i problemi di mancata corrispondenza della versione del database, gli strumenti seguenti possono risultare utili.

Usare il comando codeql version per visualizzare la versione dell'exe 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'.

Il comando di aggiornamento del database aggiornerà un database. Tenere presente che si tratta di un aggiornamento unidirezionale e non è reversibile. Per altre informazioni, vedere Aggiornamento del database.

Query e gruppi

Nell'ambito del repository GitHub di Microsoft CodeQL, sono disponibili due gruppi di query per semplificare il flusso di lavoro per sviluppatori di driver end-to-end. La suite di query windows_driver_recommended.qls è un superset di tutte le query che Microsoft ha ritenuto utile per gli sviluppatori di driver. Il gruppo di query windows_driver_mustfix.qls contiene query considerate "Must-Fix" per la certificazione WHCP, che devono essere eseguite e passate per superare il test del logo degli strumenti statici. Le suite di query Must-Fix e Consigliate vengono aggiornate regolarmente.

Correzione delle query must-fix

Il sottoinsieme di query seguenti è Must-Fix per la certificazione WHCP e sono inclusi anche nella suite Di correzione consigliata.

Questo set di regole è incluso in windows_driver_mustfix.qls.

ID Ufficio Enumerazione punti deboli comuni
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 N/D
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql N/D
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

Il file windows_driver_mustfix.qls contiene queste query di codice.

# 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

Questo set di regole è incluso in windows-driver-suites/windows_mustfix_partial.qls.

ID Ufficio Enumerazione punti deboli comuni
cpp/windows/wdk/depreated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql N/D
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Il file windows_mustfix_partial.qls contiene queste query di codice.

# 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

Queste query fanno parte della suite di query windows_driver_recommended.qls nel repository CodeQL di Microsoft GitHub. La colonna "Common Weakness Enumeration" (CWE) specifica i tipi di problemi di sicurezza cercati dalla query specificata. Per altri dettagli sulle CWE, vedere la pagina di Mitre in CWE .

Consigli per iniziare

ID Ufficio Enumerazione punti deboli comuni
cpp/offset-use-before-range-check codeql/cpp-queries//<Version>Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql N/D

Bug probabili

ID Ufficio Enumerazione punti deboli comuni
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 N/D
cpp/upcast-array-pointer-aritmetica 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 N/D
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql N/D
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

Sicurezza

ID Ufficio Enumerazione punti deboli comuni
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/potenzialmente-pericoloso-funzione 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

Il file windows_driver_recommended.qls contiene queste query di codice consigliate.

# 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

Queste query fanno parte di windows_recommended_partial.qls.

ID Ufficio Enumerazione punti deboli comuni
cpp/paddingbyteinformationdisclosure microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql N/D
cpp/badoverflowguard microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql N/D
cpp/infiniteloop microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql N/D
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql N/D
cpp/use-after-free microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql N/D
ID Ufficio Avviso di analisi del codice
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Crytpography/HardcodedIVCNG.ql N/D

Driver - Generale

ID Ufficio Avviso di analisi del codice
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Nessun controllo ca associato
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Nessun controllo ca associato
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql Avviso C28719, avviso C28726, avviso C28735, avviso C28750
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Avviso C28158
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql Avviso C28157
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql Avviso C28150
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Avviso C28120
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql Avviso C28121
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Avviso C28124
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql Avviso C28134
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql Avviso C28146

Driver - WDM

ID Ufficio Avviso di analisi del codice
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Avviso C28128
cpp/drivers/illegal-field-access2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Avviso C28175
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Avviso C28176
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (Nessun controllo CA associato)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql Avviso C28145
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Avviso C28143
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Avviso C28169

Il file windows-driver-suites/windows_recommended_partial.qls contiene queste query di codice consigliate.

# 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

Domande frequenti (FAQ)

Quando sarà necessario per la certificazione del dispositivo?

Per informazioni dettagliate sui requisiti, vedere Processo di certificazione del programma di compatibilità hardware Windows.

Qual è la motivazione alla base della richiesta di esecuzione di CodeQL nel codice sorgente del driver?

La motivazione per richiedere l'esecuzione di CodeQL nel codice sorgente del driver può essere riepilogata in due motivi principali:

  1. La sicurezza di Windows è fondamentale e richiedere l'esecuzione di CodeQL nel codice sorgente del driver è un passaggio per migliorare la sicurezza dei componenti che vengono certificati da Microsoft.
  2. Le query CodeQL vengono sviluppate attivamente dai tecnici della sicurezza microsoft, poiché Microsoft si impegna a garantire che il suo ecosistema hardware trae vantaggio dallo stesso strumento di alta qualità usato in Microsoft.

A quali tipi di driver si applica il test codeQL e il logo degli strumenti statici?

Attualmente, il test del logo degli strumenti statici richiede l'esecuzione di CodeQL e il set di query "Must-Fix" passato per tutti i driver in modalità kernel esclusi i driver di grafica. Si noti che l'esecuzione di CodeQL nei driver grafici è altamente consigliata anche se non è attualmente necessaria. Alcune query possono anche trovare difetti utili nei componenti in modalità utente.

Si prevede di estendere il test e le relative query per richiedere risultati per driver grafici, driver in modalità utente e componenti driver e altri componenti del pacchetto driver in futuro. Se si verificano comportamenti imprevisti o falsi positivi che eseguono CodeQL nei driver grafici o nei driver in modalità utente, segnalare un problema nel repository Windows-Driver-Developer-Supplemental-Tools.

Quale licenza regola l'utilizzo di CodeQL per sviluppatori di driver?

L'utilizzo di CodeQL ai fini dei test WHCP è accettabile nel Contratto di licenza per l'utente finale di Hardware Lab Kit (HLK). Per i partecipanti a WHCP, il contratto di licenza di HLK sovrascrive i termini e le condizioni di CodeQL di GitHub. Il contratto di licenza HLK indica che CodeQL può essere usato durante l'analisi automatizzata, CI o CD, come parte dei normali processi di progettazione ai fini dell'analisi dei driver da inviare e certificati come parte del WHCP.

È necessario usare Visual Studio o msbuild per eseguire CodeQL?

CodeQL non richiede l'uso di MSBuild o Visual Studio. Per un elenco dei compilatori supportati, vedere linguaggi e framework supportati.

In che modo HLK verifica che il driver sia stato analizzato da CodeQL?

Il test del logo degli strumenti statici in HLK è il test che applica questo requisito. I dettagli sul test del logo degli strumenti statici sono disponibili nella relativa pagina ms docs.

Tutti i difetti segnalati da CodeQL sono veri difetti?

Ogni query CodeQL ha diversi livelli di precisione. Il nostro obiettivo è ridurre al minimo i falsi positivi, ma occasionalmente si verificheranno. La nostra suite di query "Must-Fix" è stata sviluppata e selezionata manualmente per l'uso con il programma WHCP perché i nostri test completi generano quasi zero falsi positivi. Se vengono visualizzati falsi positivi da una query nel set di query "Must-Fix", inviare immediatamente un messaggio di posta elettronica stlogohelp@microsoft.com o inviare un problema nel repository Windows-Driver-Developer-Supplemental-Tools e microsoft lavorerà per risolverlo il prima possibile.

La classificazione di una query di "avviso" o "errore" è importante ai fini del test del logo degli strumenti statici?

Le query vengono classificate usando stati quali "error" "warning" e "problem" in CodeQL, ma questa classificazione è separata dal modo in cui il programma di compatibilità hardware di Windows e in particolare il test logo degli strumenti statici classifica i risultati. Tutti i driver con difetti di qualsiasi query all'interno della suite "Must-Fix" non supereranno il test del logo degli strumenti statici e non saranno certificati, indipendentemente dalla classificazione delle query nel file di query non elaborato (ad esempio "avviso").

È possibile generare un DVL nelle soluzioni di Visual Studio?

No, la generazione DVL deve essere eseguita a livello di progetto e non può essere eseguita nelle soluzioni di Visual Studio. Le istruzioni per la generazione di un DVL sono disponibili in: Creazione di un log di verifica del driver.

È possibile generare un log di verifica del driver (DVL) all'esterno del contesto di msbuild o Visual Studio?

Come parte di Windows Driver Kit (WDK) ed Enterprise WDK (eWDK), Microsoft fornisce un componente denominato dvl.exe che può essere usato per generare i log di verifica del driver (DVLs). A partire da WDK/eWDK preview versioni 21342 e successive, è possibile generare un DVL dalla riga di comando all'esterno del contesto di msbuild o Visual Studio passando un nome e un'architettura del driver. Per altri dettagli, vedere Creazione di un log di verifica del driver.

Ho commenti o domande su come usare CodeQL sul mio driver, dove si inviano commenti e suggerimenti?

Inviare commenti e suggerimenti e domande a stlogohelp@microsoft.com.