次の方法で共有


CodeQL と静的ツールのロゴ テスト

CodeQL とドライバーのセキュリティ

Microsoft は、Windows オペレーティング システムの攻撃対象領域を縮小することに注力しています。その目標を達成するためには、サード パーティのドライバーが強力なセキュリティ基準を満たすことが不可欠だと考えています。 このセキュリティ バーを設定するための一歩として、 Windows Hardware Compatibility Program (WHCP) への要件があります。この要件では、すべてのドライバーの提出は、ドライバーのソース コードに CodeQL エンジンを使用し、 "Must-Fix" と見なされる違反はすべて修正しなければならないとされています。

GitHub の CodeQL は、強力なセマンティック コード分析エンジンで、広範で価値の高いセキュリティ クエリのスイートと堅牢なプラットフォームの組み合わせにより、ドライバー コードをセキュリティで保護するための非常に貴重なツールです。

WHCP テストの目的での CodeQL の使用は、 Hardware Lab Kit (HLK) エンド ユーザー ライセンス契約で許可されています。 WHCP 参加者の場合、HLK の EULA は GitHub の CodeQL の使用条件を上書きして、CodeQL は WHCP の一部として申請し、認証を受けるドライバーを分析する目的で、通常のエンジニアリング プロセスの一環として、自動分析、CI、CD 中に 使用できる と記載されています。

ドライバーのソース コードを分析し、 「修正が必要」 という違反を修正する要件は、静的ツールのロゴ テストによって実施します。

このトピックでは、次の操作について説明します。

  • CodeQL を使用して、ドライバーのソース コードを分析し、影響の大きい既知のセキュリティの問題を分析します。
  • 静的ツールのロゴ テストが CodeQL の実行結果を使用できることを確認します。
  • WHCP 認定のために実行する必要がある "修正が必要な" クエリ を決定します。

重要

Windows ハードウェア互換性プログラムには、クライアントおよびサーバー オペレーティング システム上の静的ツール ロゴ (STL) テスト用の CodeQL が必要です。 引き続き、古い製品の SDV と CA のサポートを維持します。 パートナーは、静的ツール ロゴ テストの CodeQL 要件を確認することを強くお勧めします。

HLK EULA と CodeQL

Windows ハードウェア互換性プログラムテストの認定を目的とした CodeQL の使用は、 Hardware Lab Kit (HLK) エンド ユーザー ライセンス契約に基づいて許可されます。 WHCP 参加者の場合、HLK の EULA によって GitHub の CodeQL 使用条件を上書きします。 HLK の EULA には、Windows ハードウェア互換性プログラムの一部として申請し、認証を受けるドライバーを分析する目的で、通常のエンジニアリング プロセスの一環として、自動分析、CI、CD 中に CodeQL を使用できると記載されています。 次の一般的な使用を目的とする場合は、「GitHub CodeQL の使用条件」を参照するか、 CodeQL にお問い合わせください。

CodeQL の概念

CodeQL は、開発者がライブ環境外のコードに対してセキュリティ分析を実行するために使用する静的分析エンジンです。 CodeQL は、コンパイル中にコードを取り込み、そこからデータベースをビルドします。 データベースは、クエリ可能なデータ、ソース参照、ログ ファイルを含むディレクトリになります。 データベースが構築されると、CodeQL クエリ (チェックまたはルールとも呼ばれる) を使用して、データベースの分析を実行できます。このクエリは、ソース コードに違反またはセキュリティの脆弱性が含まれているかどうかを判断します。 CodeQLは、言語の正しさやセマンティクスをチェックする標準的なクエリのライブラリを提供し、コードにバグや脆弱性がないことを保証したいと願う開発者に大きな価値を提供します。

CodeQL には、カスタム クエリを作成するオプションも用意されています。 カスタム クエリの記述の詳細については、CodeQLドキュメントの「クエリ の記述」を参照してください 。

また、CodeQL は CodeQL コマンド ライン ツール (CLI) を提供し、CodeQL アクションや大規模な分析を簡単に実行できます。

CodeQL CLI の補足ドキュメントについては、 CodeQL の概要に関するドキュメントを参照してください。

1. CodeQL の設定

Windows ハードウェア互換性プログラムを使用する場合

Windows ハードウェア互換性プログラムのリリース バージョン マトリックス

このマトリックスを使用して、ダウンロードするバージョンを決定します。

Windows リリース CodeQL の CLI バージョン microsoft/windows-drivers QL pack バージョン codeql/cpp-queries QL pack バージョン 使用するブランチ
Windows Server 2022 2.4.6 または 2.15.4 1.0.13 (codeql 2.15.4 を使用している場合) 0.9.0 (codeql 2.15.4 を使用している場合) WHCP_21H2
Windows 11 2.4.6 または 2.15.4 1.0.13 (codeql 2.15.4 を使用している場合) 0.9.0 (codeql 2.15.4 を使用している場合) WHCP_21H2
Windows 11, version 22H2 2.6.3 または 2.15.4 1.0.13 (codeql 2.15.4 を使用している場合) 0.9.0 (codeql 2.15.4 を使用している場合) WHCP_22H2
Windows 11, version 23H2 2.6.3 または 2.15.4 1.0.13 (codeql 2.15.4 を使用している場合) 0.9.0 (codeql 2.15.4 を使用している場合) WHCP_22H2
Windows 11、 バージョン 24H2 2.15.4 1.1.0 0.9.0 WHCP_24H2

CodeQL CLI 2.4.6 および 2.6.3 では QL パックのバージョンが指定されていません。これは、新しいバージョンの CodeQL のみが QL パックをサポートするからです。

一般的な用途

WHCP プログラムの外部にある他のバージョンの Windows で CodeQL を一般的に使用する場合、またはクエリを開発およびテストする場合は、現在、次のバージョンとブランチをお勧めしています。

CodeQL の CLI バージョン microsoft/windows-drivers qlpack バージョン codeql/cpp-queries バージョン 使用するブランチ
2.15.4 latest latest main

CodeQL のダウンロードとインストール

Note

Visual Studio 17.8 は、WHCP_21H2 および WHCP_22H2 ブランチで使用されている古いバージョンの CodeQL との互換性を破りました。 CodeQL CLI バージョン 2.15.4 は、Visual Studio 17.8 以降を使用する場合に WHCP 21H2 および WHCP 22H2 で使用できるように検証されています。 WHCP プログラムの場合は、上記の表と認定対象の Windows リリース (バージョン 2.4.6、バージョン 2.6.3、またはバージョン 2.15.4) に従って CodeQL CLI バージョンを使用します。 メイン ブランチで一般的に使用する場合は、CodeQL CLI バージョン 2.15.4 を使用します。

  1. CodeQL を含むディレクトリを作成します。 この例では、 C:\codeql-home\

    C:\> mkdir C:\codeql-home
    
  2. 上記の表を参照して、Microsoft のドライバー クエリの目的のブランチに従って使用する CodeQL CLI のバージョンを選択します。 WHCP プログラムの一部として分析を実行する場合は、「Windows ハードウェア互換性プログラムの使用」の表を参照してください。それ以外の場合は Main ブランチと 2.15.4 を使用してください。 異なるバージョンを使用すると、ライブラリとデータベースの互換性がない可能性があります。

  3. 上記の表に関連付けられている CodeQL CLI バイナリ リリースに移動し、プロジェクトのアーキテクチャに対応した zip ファイルをダウンロードします。 たとえば、64 ビット Windows の "codeql-win64.zip" などです。

  4. 作成したディレクトリに Codeql CLI ディレクトリを展開します (例: C:\codeql-home\codeql)。

  5. バージョンをチェックして、CodeQL が正しくインストールされていることを確認します。

     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. help コマンドは、コマンドラインの使用情報を表示します。

    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.
    

CodeQL パッケージをインストールする

WHCP_21H2ブランチとWHCP_22H2 ブランチの場合

WHCP_21H2 または WHCP_22H2 および CodeQL CLI バージョン 2.15.4 で Visual Studio 2022 17.8 以降を使用する場合:

  • 「その他すべてのブランチ」の手順に従います。
  • 古いバージョンのリポジトリがまだ複製されている場合は、CodeQL サブモジュールを削除してください。 CodeQL は、既定でサブモジュール内のクエリを使用しようとする可能性があります。これにより、バージョンが一致しないためにエラーが発生します。

Visual Studio バージョン 17.7 以下の AND を使用している場合 WHCP_21H2 または WHCP_22H2 AND CodeQL CLI バージョン 2.4.6 または 2.6.3:

  • 以下の VS17.7以前を使用するWHCP_21H2およびWHCP_22H2の特別な手順 に従ってください。。

その他すべてのブランチ

CodeQL クエリ パッケージをダウンロードする

認定資格証のクエリを使用するために Windows-Driver-Developer-Supplemental-Tools リポジトリを複製する必要はなくなりました。 CodeQL パッケージ (「QL パック」または「クエリ パック」) が使用されるようになりました。

  1. Windows ハードウェア互換性プログラムリリース バージョン マトリックスから 、正しいバージョンの microsoft/windows ドライバー パックをダウンロードします。 下記コマンド内で @<version> を指定する。
C:\codeql-home\> codeql pack download microsoft/windows-drivers@<version>

たとえば、WHCP_24H2を使用している場合は、次のコマンドを実行して、1.1.0 windows-drivers クエリ パックをダウンロードします。

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

このコマンドを使用して、CodeQL cpp-queries クエリ パックのバージョン 0.9.0 をダウンロードします。

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

(上記の手順は省略できます。 --download オプションは、分析プロセスの後半で必要なクエリをダウンロードするためです)。

CodeQL は、ダウンロードしたクエリ パックを既定のディレクトリにインストールします。

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

このディレクトリを変更したり、インストールされているパックを移動したりしないでください。

Windows ドライバーのクエリ スイートをダウンロードする

2 つのプライマリ クエリ スイートを見つけてローカル PC にコピーします。

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

それらの内容は以下の「クエリとスイート」に記載されており、2 つのファイルはhttps://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/main/suitesにあります

2. CodeQL データベースの構築

これらの例では、Windows 開発環境を使用します。インストール場所が C:\codeql-home であることを想定していますが、ユーザーに適した設定を使用できます。 コンパイラがサポートされている一覧については、「CodeQLがサポートしている言語とフレームワーク」を参照してください。

  1. CodeQL が作成するデータベースを置くためのディレクトリを作成します。 例: C:\codeql-home\databases

    mkdir C:\codeql-home\databases
    
  2. CodeQL コマンドを使用し、次のパラメーターを使用してデータベースを作成します。

    • 最初のパラメーターは、データベース ディレクトリへのリンクです。 例: C:\codeql-home\databases\MyDriverDatabase (ディレクトリがすでに存在する場合、このコマンドを実行するとエラーが発生します)。
    • --language または -l は、ソース コードが含まれている言語です (コンマ区切りのリストを指定できます。例: [cpp, javascript])。
    • -- source または -s は、ソース コードへのパスです。
    • --command または -c は、ビルド コマンドまたはビルド ファイルへのパスです。
    codeql database create <database directory> --language=<language> --source=<path to source code> --command=<build command or path to build file>
    

簡易ドライバーの例。

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"

複数のドライバーの例。

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

database create コマンド使用の詳細やヘルプについては、「CodeQL データベースの作成」を参照するか、次のコマンドを使用してください。

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

3. 分析の実行

Note

Visual Studio バージョン 17.7 以前を使用し、 かつ WHCP_21H2または WHCP_22H2 AND CodeQL VLI バージョン 2.4.6 または 2.6.3 を使用している場合は、 VS17.7 以前を使用するWHCP_21H2とWHCP_22H2 に関する特別な手順に従ってください。

この時点でセットアップが完了し、次の手順では、ドライバーのソース コードに対して実際の分析を実行します。

  1. CodeQL コマンドを使用し、次のパラメーターを使用してデータベースを分析します。

    • 最初のパラメーターは、データベース ディレクトリへのリンクです。 例: C:\codeql-home\databases\MyDriverDatabase. (ディレクトリが存在しない場合、このコマンドを実行するとエラーが発生します)
    • --download フラグは、クエリを実行する前に依存関係をダウンロードするように CodeQL に指示します。
    • --format は、出力ファイルのファイルの種類を指定します。 オプションには、SARIF と CSV があります。 (WHCP ユーザーの場合は SARIF 形式を使用します)
    • --output は、出力ファイルが必要な場所へのパスです。ファイル名には、必ず形式を含めてください。 (ディレクトリがその時点で存在しない場合、このコマンドを実行するとエラーが発生します)
    • クエリ指定子パラメーターは、次のような引数のスペース区切りのリストです。
      • クエリ ファイルへのパス
      • クエリ ファイルを含むディレクトリへのパス
      • クエリ スイート ファイルへのパス
      • CodeQL クエリ パックの名前
    codeql database analyze --download <path to database> <path to query suite .qls file> --format=sarifv2.1.0 --output=<outputname>.sarif
    

    例:

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

    database analyzeコマンドの使用方法の詳細またはヘルプについては、「CodeQL CLI を使用したデータベースの分析」および 「CodeQL パックを使用した CodeQL データベースの分析」を参照してください。

    コマンドラインヘルプについては、次のコマンドを使用します。

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

VS17.7 以前を使用したWHCP_21H2とWHCP_22H2に関する特別な手順

これらの手順は、Visual Studio 17.7 以前と CodeQL 2.6.3 または 2.4.6 の両方を使用する場合にのみ適用されます

  1. 上記の手順で示されているように、CodeQL バージョンをインストールします。

  2. ドライバーに固有の CodeQL クエリを含む Windows ドライバーDeveloper補助ツール リポジトリを複製してインストールします。

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

  3. 認定する Windows のバージョンの正しいブランチを特定するには、 Windows ハードウェア互換性プログラムリリース バージョン マトリックス を参照してください。

  4. git checkout コマンドを使用して、識別されたブランチをチェックします。

  5. サブモジュールが codeql-home ディレクトリに存在することを確認します。

     D:/codeql-home
         |--- codeql
         |--- Windows-Driver-Developer-Supplemental-Tools
    
  6. CodeQL データベースを分析する。

    このサンプル コマンドを環境に合わせて更新します。 パラメーター、新しいデータベースへのパス、形式、出力 sarif ファイル、分析で使用する CodeQL クエリまたはクエリ スイートへのパスを設定します。

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

    例:

    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

    実行するスイートまたはクエリへのパスを必ずチェックしてください。すべてのブランチに同じファイル構造があるわけではありません。

  7. テスト結果の確認や送信など、次の手順については、このドキュメントの他のガイダンスを参照してください。

4. 結果の表示と解釈

このセクションでは SARIF 形式に焦点を当てますが、これは次の手順で必要になります。ただし、CSV 形式の方が適している場合は、CSV 形式でも構いません。

Static Analysis Results Interchange Format (SARIF) は、静的な分析結果を共有するために使用される JSON タイプの形式です。 標準の詳細については、OASIS Static Analysis Results Interchange Format (SARIF) 、CodeQL での SARIF Output の使用方法、スキーマ jsonを参照してください。

分析結果を解釈するには、手動でオブジェクトを並べ替えるなど、複数の方法があります。 ここでは、使用されている方法をいくつか紹介します。

  • Microsoft Sarif Viewer (Web) には、SARIF ファイルをビューアーにドラッグ アンド ドロップして、ルール別に分類された結果を表示できる機能があります。 これは、違反の数や違反のあるクエリを確認するには、非常に迅速で簡単な方法ですが、行番号以外のソース コード情報を見つけるのは簡単ではありません。 違反がない場合、ページが更新されないことに注意してください。

  • Microsoft SARIF Viewer for Visual Studio は、Visual Studio 内で結果を表示し、結果からソース コードへのシームレスな移行を実現するのに適しています。

  • SARIF extension for Visual Studio Code

SARIF ファイルで最も重要なセクションは、「Run」オブジェクト内の「Results」プロパティです。 各クエリには、検出された違反とその発生場所に関する詳細を含む Results プロパティがあります。 違反が見つからない場合、プロパティ値は空になります。

クエリは、「エラー」、「警告」、「問題」などの状態を使用して分類されますが、この分類は、Windows ハードウェア互換性プログラム、特に静的ツール ロゴ テストで結果を評価する方法とは別のものです。 「修正が必要」スイートのクエリのいずれかに欠陥があるドライバーは、生のクエリ ファイルのクエリ分類 (例:「警告」) にかかわらず、 静的ツール ロゴ テストに 不合格となり、認証されません

5. CodeQL の結果の抑制 (省略可能)

ドライバーの CodeQL では、結果の抑制がサポートされています。 現在、抑制は、開発者が問題をトリアージし、ノイズを減らすのに役立つ便利な方法として提供されており、修正が必要なチェックをバイパスする方法ではありません。 現時点では、ドライバー検証ログの生成や静的ツール ロゴ のテストに合格しても影響はありません。 抑制を使用するには、DriverAlertSuppression.ql クエリを、実行する他のクエリまたはスイートと同時に実行する必要があります。 既定では、このクエリは、githubs メイン/development ブランチからスイートを実行するときに有効になります。

コード分析から移植されたチェックでは、既存のコード分析抑制が適用されます。 詳細については、 C++ 警告 pragma のトピックを参照してください。

  • Known limitation: 現時点では、同じ行に #pragma(disable) と #pragma(suppress) を組み合わせることはできません。

CodeQL を初めて使用するチェックの場合は、次の 2 つのいずれかを実行して抑制できます。

  • コード分析の場合と同様に、違反の上の行に "#pragma(suppress:the-rule-id-here)" 注釈 (負のクォート) を記述します。 "the-rule-id-here" は、特定のクエリのメタデータ内の @id 値に置き換えることができます。ファイルの先頭に表示できます。

  • テキスト "lgtm[the-rule-id-here]" (マイナスクォート) で構成される上の行にコメントを書きます。 ドライバーアラート抑制クエリではなく、標準の C/C++ アラート抑制クエリ を実行する必要があります。

抑制が存在して認識されると、結果の SARIF ファイルには結果が抑制されたデータが含まれ、ほとんどの結果ビューアーは既定では結果を表示しません。

6. SARIF のドライバー検証ログ形式 (DVL) への変換

静的ツール ロゴ テストでは、ドライバーのソース コードで実行された複数の静的分析エンジンからコンパイル結果である ドライバー検証ログ (DVL) を分析します。 SARIF ファイルを DVL 形式に変換するには 3 つの方法があり、設定に適したファイルを選択できます。

Visual Studio の使用 (WDK プレビュー ビルド 20190 以降)

  1. SARIF 結果ファイルを、.vcxproj ファイルと同じディレクトリに置きます。
  2. ドライバー拡張メニューで [ドライバー検証ログの作成] を選択します。
  3. DVL UI で SARIF ファイルが検出されたことを確認します。
    • 注意: Visual Studio UI を使用して SARIF ファイルを .vcxproj ディレクトリに移動した場合、実際に移動する代わりに、Visual Studio によって SARIF ファイルへの 参照 が作成される可能性があります。 Visual Studio の外部でディレクトリを開き、ディレクトリが本当に存在することを確認してください。
  4. [作成] を選択します

MSBuild の使用

  1. SARIF 結果ファイルを、.vcxproj ファイルと同じディレクトリに置きます。

  2. Visual Studio コマンド プロンプト、Visual Studio Native Tools コマンド プロンプト、Enterprise Windows Driver Kit (EWDK) を開きます。

  3. 次のパラメーターを含む msbuild コマンドを使用します。

    • vcx プロジェクト ファイルへのパス
    • /target:dvl
    • /p:Configuration="Release"
    • /P:Platform=<platform> (x86、x64、arm、arm64 のいずれかの文字列のみを使用)

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

CMD の使用

  1. WDK またはマウントされている eWDK で dvl.exe を見つけます。

  2. のパラメーターと共に exe を使用します

    • /manualCreate
    • driver name (.sys ファイル形式は含めないでください)
    • driver architecture (x86、x64、arm、arm64 のいずれかの文字列のみを使用)

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

静的ツール ロゴ HLK テストの詳細な手順と、DVL ファイルを配置する場所に関するガイダンスについては、「テストの実行」を参照してください。

7. Visual Studio ビルド後のイベント (オプション)

Visual Studio を使用してドライバーをビルドする場合は、ビルド後のイベントとして実行するように CodeQL クエリを設定できます。

この例では、小規模のバッチ ファイルが対象の場所に作成され、ビルド後のイベントとして呼び出されます。 Visual Studio C++ ビルド イベントの詳細については、「ビルド イベントの指定」を参照してください。

  1. CodeQL データベースを再作成し、必要なクエリを実行する小規模のバッチ ファイルを作成します。 この例では、バッチ ファイルに RunCodeQLRebuildQuery.bat という名前が付けられます。 サンプル バッチ ファイルに示されているパスを、ディレクトリの場所と一致するように変更してください。

    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. devenv.exe / Edit オプションは、Visual Studio の既存のインスタンスで SARIF 結果ファイルを開くためにバッチ ファイルで使用します。 SARIF の結果を表示するには、Microsoft SARIF Viewer for Visual Studio をインストールし、詳細については、その手順を参照してください。

  3. ドライバー プロジェクトで、プロジェクトのプロパティに移動します。 [構成] プル ダウンで、CodeQL でチェックするビルド構成を選択します。「リリース」を推奨します。 CodeQL データベースの作成とクエリの実行には数分かかるため、プロジェクトのデバッグ構成で CodeQL を実行することは推奨しません。

  4. ドライバー プロジェクトのプロパティで [ビルド イベント] および [ビルド後のイベント] を選択します。

  5. バッチ ファイルへのパスと、ビルド後イベントの説明を指定します。

コマンド ライン オプションとして構成されたバッチ ファイルを示す Visual Studio ビルド 後のイベント構成。

  1. バッチ ファイルの実行結果は、ビルド出力の最後に表示されます。

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

トラブルシューティング

WHCP の認定を受ける場合、まずは対象となる Windows リリースに関連付けられている HLK バージョン、Windows Driver Developer Supplemental Tools リポジトリ内の関連ブランチ、それに続く CodeQL CLI バージョンを使用していることを確認してください。 HLK/Windows リリースの互換性マトリックスについては、「Windows Hardware Lab Kit」を参照してください。また、Windows リリース/Windows ドライバーDeveloper補助ツール リポジトリ ブランチ/CodeQL CLI バージョンについては、「CodeQL 設定」セクションの WHCP テーブルを参照してください。

エラーと回避策

For データベースのバージョン の不一致の問題については、次のツールが有効な場合があります。

codeql バージョン コマンドを使用して、codeql exe のバージョンを表示します。

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'.

データベース アップグレード コマンドによって、データベースを更新します。 これは一方向のアップグレードであり、元に戻すことはできません。 詳細については、「データベースのアップグレード」を参照してください。

クエリとスイート

Microsoft CodeQL GitHub リポジトリの一部として、エンドツーエンドのドライバー開発者ワークフローを簡略化するための 2 つのクエリ スイートが用意されています。 windows_driver_recommended.qls クエリ スイートは、Microsoft がドライバー開発者にとって価値があると判断したすべてのクエリのスーパーセットです。 windows_driver_mustfix.qls クエリ スイートには、WHCP 認定のために「修正が必要」とみなされるクエリが含まれおり、これは、静的ツール ロゴ テストに合格するために実行して合格する必要があります。 「修正が必要」と「推奨」のクエリ スイートは、どちらも定期的に更新されます。

クエリの修正が必要

以下のクエリのサブセットは、WHCP 認証のために 「修正が必要」 であり、 推奨される修正 スイートにも含まれています。

この一連の規則は、 windows_driver_mustfix.qlsに含まれています。

ID 場所 Common Weakness Enumeration
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190CWE-192
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql 該当なし
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql 該当なし
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190CWE-197CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253

windows_driver_mustfix.qls ファイルには、コード クエリを修正する必要があるファイルが含まれています。

# 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

この一連の規則は、 windows-driver-suites/windows_mustfix_partial.qls に含まれています。

ID 場所 Common Weakness Enumeration
cpp/windows/wdk/deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql 該当なし
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

windows_mustfix_partial.qls ファイルには、コード クエリを修正する必要があるファイルが含まれています。

# 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

これらのクエリは、 Microsoft GitHub CodeQL リポジトリの windows_driver_recommended.qls クエリ スイートの一部です。 「Common Weakness Enumeration」(CWE) 列は、指定されたクエリがどのような種類のセキュリティ問題を検索するかを指定します。 CWE の詳細については、 CWE の MITRE のページ を参照してください。

ベスト プラクティス

ID 場所 Common Weakness Enumeration
cpp/offset-use-before-range-check codeql/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql 該当なし

可能性の高いバグ

ID 場所 Common Weakness Enumeration
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190CWE-192
cpp/integer-multiplication-cast-to-long codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190CWE-192CWE-197CWE-681
cpp/signed-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql 該当なし
cpp/upcast-array-pointer-arithmetic codeql/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119CWE-843
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql 該当なし
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql 該当なし
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-457CWE-665

セキュリティ

ID 場所 Common Weakness Enumeration
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-190CWE-197CWE-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

windows_driver_recommended.qls ファイルには、これらの推奨されるコード クエリが含まれています。

# 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

これらのクエリは、 windows_recommended_partial.qls の 一部です。

ID 場所 Common Weakness Enumeration
cpp/paddingbyteinformationdisclosure microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql 該当なし
cpp/badoverflowguard microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql 該当なし
cpp/infiniteloop microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql 該当なし
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql 該当なし
cpp/use-after-free microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql 該当なし
ID 場所 コード分析の警告
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers//<Version>microsoft/Security/Crytpography/HardcodedIVCNG.ql 該当なし

ドライバー - 全般

ID 場所 コード分析の警告
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql 関連付けられた CA チェックなし
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql 関連付けられた CA チェックなし
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql C28719 警告C28726 警告C28735 警告C28750 警告
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql C28158 警告
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql C28157 警告
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28150 警告
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120 警告
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql C28121 警告
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124 警告
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134 警告
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146 警告

ドライバー - WDM

ID 場所 コード分析の警告
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql C28128 警告
cpp/drivers/illegal-field-access2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql C28175 警告
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql C28176 警告
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (関連付けられた CA チェックなし)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql C28145 警告
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql C28143 警告
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql C28169 警告

windows-driver-suites/windows_recommended_partial.qls ファイルには、これらの推奨されるコード クエリが含まれています。

# 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

よく寄せられる質問 (FAQ)

デバイスの認証にこれが必要になるのはいつですか?

要件の詳細については、「Windows ハードウェア互換性プログラム認定プロセス」を参照してください。

ドライバーのソース コードで CodeQL を実行する必要がある理由は何ですか?

ドライバーのソース コードで CodeQL を実行する必要がある理由は、主に次の 2 つに要約できます。

  1. Windows のセキュリティは最も重要であり、ドライバーのソース コードで CodeQL の実行を要求することは、Microsoft によって認定されるコンポーネントのセキュリティを向上させるための 1 つのステップです。
  2. CodeQL クエリは、Microsoft のセキュリティ エンジニアによって積極的に開発されています。Microsoft は、Microsoft で使用されているのと同じ高品質のツールからハードウェア エコシステムの利点を確保することに取り組んでいます。

CodeQL と静的ツール ロゴ テストはどのような種類のドライバーに適用されますか?

現在、静的ツール ロゴ テストでは、CodeQL を実行し、グラフィックス ドライバーを除くすべてのカーネル モード ドライバーに対して「Must-Fix」クエリ セットに合格する必要があります。 現時点では必須ではありませんが、グラフィックス ドライバーで CodeQL を実行することを強くお勧めします。 一部のクエリでは、ユーザー モード コンポーネントの有用な欠陥が見つかる場合もあります。

将来的には、グラフィックス ドライバー、ユーザー モード ドライバーとドライバー コンポーネント、およびその他のドライバー パッケージ コンポーネントの結果を要求するようにテストとそのクエリを拡張する予定です。 グラフィックス ドライバーまたはユーザー モード ドライバーで CodeQL を実行している予期しない動作や擬陽性が発生した場合は、Windows-Driver-Developer-Supplemental-Tools リポジトリで問題を報告してください。

ドライバー開発者向けの CodeQL の使用を規定するライセンスはどれですか?

WHCP テストの目的での CodeQL の使用は、Hardware Lab Kit (HLK) エンド ユーザー ライセンス契約で許可されています。 WHCP 参加者の場合、HLK の EULA によって GitHub の CodeQL 使用条件を上書きします。 HLK EULA には、WHCP の一部として申請し、認証されるドライバーを分析する目的で、自動分析、CI、または CD 中に CodeQL を使用できる ことが記載されています。

CodeQL を実行するには、Visual Studio や msbuild を使用する必要がありますか?

CodeQL では、MSBuild または Visual Studio を使用する必要はありません。 サポートされているコンパイラの一覧については、「サポートされている言語とフレームワーク」を参照してください。

ドライバーが CodeQL によってスキャンされたことを HLK で確認するにはどうすればよいですか?

HLK の静的ツール ロゴ テストは、この要件を実施するテストです。 静的ツール ロゴ テストの詳細については、 MS ドキュメントのページを参照してください。

CodeQL によって報告された欠陥はすべて真の欠陥ですか?

CodeQL クエリの精度のレベルはさまざまです。 誤検出を最小限に抑えることを目標にしていますが、ときどき誤検出が発生することがあります。 「修正が必要」クエリのスイートは、WHCPプログラムで使用するために開発され、手動で選択されています。これは、広範なテストでほぼゼロの誤検知が発生するためです。 一連の「修正が必要」クエリ内のクエリから擬陽性が検出された場合は、すぐにstlogohelp@microsoft.comにメールを送信するか、Windows-Driver-Developer-Supplemental-Tools リポジトリで問題を報告してください。できるだけ早く解決できるように努力します。

静的ツール ロゴ テストの目的で、クエリが「警告」または「エラー」に分類されることは重要なことですか?

CodeQL では、クエリは、「エラー」、「警告」、「問題」などの状態を使用して分類されますが、この分類は、Windows ハードウェア互換性プログラム、特に静的ツール ロゴ テストで結果を評価する方法とは別のものです。 「修正が必要」スイートのクエリのいずれかに欠陥があるドライバーは、生のクエリ ファイルのクエリ分類 (例:「警告」) にかかわらず、静的ツール ロゴ テストに 不合格となり、認証されません

Visual Studio ソリューションで DVL を生成できますか?

いいえ。DVL の生成はプロジェクト レベルで実行する必要があり、 Visual Studio ソリューションでは実行できません。 DVL の作成方法については、「ドライバー検証ログの作成」を参照してください。

msbuild や Visual Studio のコンテキスト外でドライバー検証ログ (DVL) を生成できますか?

Windows Driver Kit (WDK) と Enterprise WDK (eWDK) の一部として、Microsoft は dvl.exe と呼ばれるコンポーネントを提供しており、これを使用してドライバー検証ログ (DVL) を生成できます。 WDK/eWDK プレビュー バージョン 21342 以降では、ドライバー名とアーキテクチャを渡すことで、msbuild や Visual Studio のコンテキスト外でコマンド ラインから DVL を生成できます。 詳細については、「ドライバー検証ログの作成」を参照してください。

ドライバーで CodeQL を使用する方法に関するコメントや質問があります。どこにフィードバックを送ればよいですか?

フィードバックやご質問は、 stlogohelp@microsoft.comにお送りください。