静的ドライバー検証ツールの概要
Windows ドライバー モデル (WDM) またはカーネル モード ドライバー フレームワーク (KMDF)、NDIS、または Storport に準拠する堅牢なドライバーを作成するには、専門知識を持ち、ドライバーが I/O マネージャーと対話する方法を理解する必要があります。 これらのドライバーのテストも同様に難しくなります。
固体ドライバーの開発は、次の理由で困難な場合があります。
ドライバーは、単一プロセッサ コンピューター上でも非同期です。
ドライバーは大規模に再入可能です。
ドライバーは、多くのあいまいなルールを使用します。
ドライバー モデルは、時間の経過に伴い進化し成熟します。
デバイス ドライバーのテストは、次の理由によって制限されます。
観測。 ドライバーとオペレーティング システムの間の相互作用でエラーを観察することはできません。 ドライバーは暗黙的な使用規則に違反し、クラッシュや不適切な動作を引き起こす可能性がありますが、ドライバーの開発とテスト時にエラーの根本原因を検出することは困難です。
制御。 通常の状況で正しく動作するドライバーには、スタック内のドライバーの下にあるドライバーが IRP に失敗した場合など、例外的な状況でのみ発生する微妙なエラーが発生する可能性があります。 このような状況は実行が困難であるため、従来のテストではドライバー コードを通じてエラー パスが適切に検出されません。
SDV は、ドライバーをテストするときに持っている観察と制御の両方を強化します。 WDM、KMDF、NDIS、および Storport 関数を適切に使用するための規則を定義し、それらの規則に対するドライバーのコンプライアンスを監視することで、SDV はエラーを観察する機能を向上させます。 たとえば、WDM 規則 LowerDriverReturn では、特定の状況では、ドライバーのディスパッチ ルーチンは常にスタック内の下位ドライバーによって返された値を返す必要があることを指定します。
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 と静的ツール ロゴ テストを参照してください。