次の方法で共有


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

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

次のセクションでは、ドライバーの基本的な要件と、SDV が検証するドライバーに必要な具体的な構文について説明します。 SDV では、ドライバーがこれらの要件に準拠していることを確認しませんが、ドライバーが準拠していない場合、SDV は実行に失敗する可能性がます。まれに、誤った解釈のために、SDV は偽陽性または偽陰性の結果を報告することがあります。

重要

SDV はサポートされなくなり、Windows 24H2 WDK または EWDK リリースでは SDV を使用できません。 ビルド 26017 より新しい WDK では使用できません。また、Windows 24H2 RTM WDK には含まれていません。 SDV は、Windows 11 バージョン 22H2 EWDK (2023 年 10 月 24 日リリース) と Visual Studio ビルド ツール 17.1.5 を からダウンロードすることで引き続き使用。 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 は、カーネルモード ドライバー フレームワークから生成されたドライバーを確認できます。 詳細については、「KMDF ドライバーの関数ロール型を使用した関数の宣言」を参照してください。

  • SDV は、SDV-NDIS コールバック関数型を使用して各コールバック関数を関数宣言で注釈を付けることにより、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 の結果の詳細については、「静的ドライバー検証ツールの結果の解釈」を参照してください。