次の方法で共有


サポートされる ドライバー

SDV がドライバーを検証するには、ドライバー コード、具体的には、ドライバーのエントリ ポイントと、必要なドライバー機能をサポートする関数とルーチン内のコードを解釈できる必要があります。

以降のセクションでは、ドライバーの基本的な要件と、SDV が検証するドライバーに必要な特定の構文について説明します。 SDV はドライバーがこれらの要件に適合しているかどうかを確認しませんが、ドライバーが適合しない場合、SDV の実行が失敗する可能性があり、まれに誤解釈によって誤検知(偽陽性)または偽陰性の結果を報告する事態が発生することがあります。

Von Bedeutung

SDV はサポートされなくなり、Windows 24H2 WDK または EWDK リリースでは SDV を使用できません。 ビルド 26017 より新しい WDK では使用できません。また、Windows 24H2 RTM WDK には含まれていません。 SDV は、Windows Driver Kit (WDK) のダウンロードから Visual Studio ビルド ツール 17.1.5 を使用して Windows 11 バージョン 22H2 EWDK (2023 年 10 月 24 日リリース) をダウンロードしても使用できます。 SDV を実行する Enterprise WDK のみを使用することをお勧めします。 古いバージョンの標準 WDK を Visual Studio の最近のリリースと組み合わせて使用することはお勧めしません。これにより、分析エラーが発生する可能性があります。
今後、CodeQL はドライバーの主要な静的分析ツールになります。 CodeQL には、クエリ対象のデータベースとしてコードを扱う強力なクエリ言語が用意されているため、特定の動作やパターンなどに対するクエリを簡単に記述できます。 CodeQL の使用方法の詳細については、「 CodeQL と静的ツールのロゴ テスト」を参照してください。

基本的なドライバーの特性

SDV では、次の特性を持つドライバーのみを検証できます。

  • SDV は、C および C++ で記述されたドライバーとライブラリを検証します。

  • SDV は、KMDF 準拠および WDM 準拠のデバイス ドライバー (関数ドライバー、フィルター ドライバー、バス ドライバー)、NDIS ドライバー (フィルター、ミニポート、プロトコル ドライバー)、および Storport ドライバーでのみ完全な検証を実行します。

  • SDV は、上記のカテゴリに適合しないドライバーに対して、ジェネリック プロパティ ( NullCheck など) の限定的な検証を試みます。

  • SDV は、WDM 関数の役割の種類を使用して、ドライバーコールバック関数を宣言する WDM ドライバーを確認できます。 関数を宣言する方法については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。

  • SDV-KMDF コールバック関数の役割の種類を使用して各コールバック関数を宣言する場合、SDV は、Kernel-Mode Driver Framework から生成されたドライバーを確認できます。 詳細については、「 KMDF ドライバーの関数ロール型を使用した関数の宣言」を参照してください。

  • SDV は NDIS ドライバーを検証できます。各コールバック関数に、SDV-NDIS コールバック関数型を使用して関数宣言に注釈を付ける必要があります。 詳細については、「 NDIS ドライバーの関数の役割の種類を使用して関数を宣言する」を参照してください

  • 各コールバック関数に関数宣言で注釈を付ける場合、SDV は Storport ドライバーを検証できます。 これを行うには、SDV-Storport コールバック関数型を使用します。 詳細については、 Storport ドライバーの関数ロール型を使用して関数を宣言するを参照してください。

ドライバーの基本的な要件

SDV で WDM ドライバーを検証するには、ドライバーは次の手順を実行する必要があります。

SDV で KMDF ドライバーを検証するには、ドライバーで次の手順を実行する必要があります。

SDV で NDIS ドライバーを確認するには、ドライバーは次の操作を行う必要があります。

さらに、SDV では、次をサポートするドライバーを確認できます。

予約された関数名

SDV 検証エンジン は、ドライバーまたはライブラリ コードが SDV が内部で使用するのと同じ関数名パターンを使用する場合に正しく動作しません。

具体的には、次の場合、SDV はコードを正しく解釈しません。

  • このコードには、__initで始まり、その後に 1 つ以上の整数 (__init123など) が続く関数名が含まれています。

  • このコードには、sdv_Funcなどのsdv_で始まる関数名、または文字列 _sdv_ (Func_sdv_やFunc_sdv_fooなど) が含まれます。

  • ライブラリは .def ファイルを使用してエクスポートされた関数の名前を変更し、外部名はライブラリ内の別の静的関数の名前と同じです。

ドライバー コードまたはライブラリ コードにこれらの要素が含まれている場合、SDV はドライバーの検証またはライブラリの処理を試みますが、結果は サポートされていない機能 (NSF) です。 SDV の結果の詳細については、「 静的ドライバー検証ツールの結果の解釈」を参照してください。