ドライバー検証ツール は、ドライバー テストの有効性を高める実行時検証ツールです。 テスト用にドライバーを展開するときに、すべてのテスト コンピューターで実行するようにドライバー検証ツールを有効にして構成できます。
リモート テスト コンピューターでドライバー検証ツールを有効にする場合は、テスト コンピューターとのカーネル モード デバッグ接続を常に設定する必要があります。 ターゲット コンピューターの構成とデバッグ ケーブルの設定については、「 Windows デバッグの概要」を参照してください。
ドライバー パッケージ プロジェクトのドライバー検証ツールプロパティの設定
- ドライバー パッケージのプロパティ ページを開きます。 ソリューション エクスプローラーでドライバー パッケージ プロジェクトを長押し (または右クリック) し、[プロパティ] を選択 します。
- ドライバー パッケージのプロパティ ページで、[ 構成プロパティ] を選択し、[ ドライバーのインストール] を選択し、[ ドライバーの検証] を選択します。
- [ ドライバーの検証を有効にする] オプションを選択します。 このオプションを選択すると、テスト コンピューターで検証するドライバーを選択し、使用する ドライバー検証ツール オプションを選択できます。
プロジェクトの構成とプラットフォーム
構成リストとプラットフォームの一覧を使用すると、プロジェクト構成とプラットフォームの組み合わせごとに異なる展開設定を適用できます。 たとえば、デバッグ ビルドの展開オプションのセットを使用して 1 台のテスト コンピューターにドライバーを展開し、リリース ビルドの展開オプションを使用して別のテスト コンピューターにドライバーを展開できます。
ドライバー検証ツールを有効にする
テスト コンピューターで、コンピューター上のすべてのドライバー、ドライバー プロジェクトのみ、または指定したドライバーの一覧に対して、ドライバー検証ツールを有効にすることができます。 たとえば、特定のデバイスのスタック上のドライバーのセットに対してドライバー検証ツールを有効にすることができます。
ドライバーの確認
テスト コンピューターで検証するドライバーを指定します。
すべてのドライバー
ドライバー検証ツールがリモート テスト コンピューターにインストールされているすべてのドライバーを検証することを指定します。
プロジェクト出力
ドライバー検証ツールがリモート テスト コンピューターにインストールされているドライバー プロジェクトを検証することを指定します。 これが既定のオプションです。
ドライバーの一覧
ドライバー検証ツールがリモート テスト コンピューターで検証するドライバーまたはドライバーの一覧を指定します。 たとえば、特定のデバイスに関連付けられているすべてのドライバーを一覧表示できます。 ドライバーをバイナリ名で指定します (例: Driver.sys)。 ドライバーの一覧を区切る場合は、セミコロンを使用します。
n*.sysなどのワイルドカード値はサポートされていません。
ドライバー検証ツールの標準フラグ
テスト コンピューターで、次のドライバー検証ツール オプションを構成できます。
DDI コンプライアンス チェック (Windows 8)
このオプションがアクティブな場合、ドライバー検証ツールは、ドライバーとオペレーティング システムのカーネル インターフェイス間の適切な相互作用をチェックする一連のデバイス ドライバー インターフェイス (DDI) ルールを適用します。
-
このオプションがアクティブな場合、ドライバー検証ツールは、ドライバーによるスピン ロック、ミューテックス、および高速ミューテックスの使用を監視します。 これにより、ドライバーのコードが、ある時点でデッドロックを引き起こす可能性があるかどうかを検出します。
-
このオプションがアクティブな場合、ドライバー検証ツールは、ダイレクト メモリ アクセス (DMA) ルーチンのドライバーの使用を監視します。 これにより、DMA バッファー、アダプター、マップ レジスタの不適切な使用が検出されます。
-
このオプションがアクティブな場合、ドライバー検証はページング可能なコードを無効にすることにより、ドライバーに極度のメモリ負荷をかけます。 ドライバーが間違った IRQL で、またはスピン ロックを保持しているときにページ メモリにアクセスしようとすると、ドライバー検証はこの動作を検出します。
-
このオプションがアクティブな場合、ドライバー検証ツールは特別なプールからドライバーの割り込み要求パケット (IRP) を割り当て、ドライバーの I/O 処理を監視します。 これにより、I/O ルーチンの不正な使用または一貫性のない使用が検出されます。 また、ドライバー検証ツールは、複数の I/O マネージャー ルーチンの呼び出しを監視し、プラグ アンド プレイ (PnP) IRP、電源 IRP、WMI IRP のストレス テストを実行します。
-
このオプションがアクティブな場合、ドライバー検証は、解放されたメモリの誤った処理など、ドライバー クラッシュの一般的な原因を探します。
-
このオプションがアクティブな場合、ドライバー検証ツールは、ドライバーがアンロードされるときにすべてのメモリ割り当てを解放したかどうかを確認します。 これにより、メモリ リークが明らかになります。
-
このオプションがアクティブな場合、ドライバー検証は、カーネル モード ルーチンによるユーザー モード アドレスへの参照など、セキュリティの脆弱性を引き起こす可能性のある一般的なエラーを探します。
-
このオプションがアクティブな場合、ドライバー検証はドライバーのメモリ要求のほとんどを特別なプールから割り当てます。 この特別なプールは、メモリオーバーラン、メモリアンダーラン、そして解放後にアクセスされるメモリを監視します。
ドライバー検証ツールのシナリオ固有の設定
-
このオプションがアクティブな場合、ドライバー検証ツールはプールの割り当て要求とその他のリソース要求にランダムに失敗します。 これらの割り当てエラーをシステムに挿入することで、ドライバー検証ツールは、リソースの少ない状況に対処するドライバーの能力をテストします。
-
このオプションがアクティブな場合、ドライバー検証ツールは、 IoCallDriver へのランダムな呼び出しのSTATUS_PENDINGを返すことによって、STATUS_PENDING戻り値に対するドライバーの応答をテストします。
-
このオプションがアクティブな場合、ドライバー検証ツールは、IRP のドライバーの使用を監視し、IRP の使用のログを作成します。
スタックの不変MDLチェック (Windows 8)
[インバリアント MDL Checking for Stack]\(スタックのインバリアント MDL チェック\) オプションは、ドライバー がドライバー スタック全体で不変の MDL バッファーを処理する方法を監視します。 ドライバー検証ツールは、インバリアント MDL バッファーの不正な変更を検出できます。 このオプションを使用するには、少なくとも 1 つのドライバーで I/O 検証を有効にする必要があります。
ドライバーのMDL不変性チェック (Windows 8)
[インバリアント MDL Checking for Driver]\(ドライバーのインバリアント MDL チェック\) オプションは、ドライバーがドライバーごとに不変の MDL バッファーを処理する方法を監視します。 このオプションは、インバリアント MDL バッファーの不正な変更を検出します。 このオプションを使用するには、少なくとも 1 つのドライバーで I/O 検証を有効にする必要があります。
Power Framework 遅延処理ファジング (Windows 8)
このオプションがアクティブな場合、ドライバー検証ツールはスレッド スケジュールをランダム化して、ドライバーのコンカレンシー エラーをフラッシュします。
スタック ベースの障害挿入 (Windows 8)
スタック ベースの障害挿入オプションは、カーネル モード ドライバーでリソースエラーを挿入します。 このオプションでは、ドライバー 検証ツール と組み合わせて特別なドライバー KmAutoFail.sysを使用して、ドライバー エラー処理パスに侵入します。
手記スタック ベースの障害挿入と低リソース シミュレーションを組み合わせることはできません。
I/O 検証を必要とするドライバー検証ツールのオプション
最初に I/O 検証を有効にする必要がある 4 つのオプションがあります。 I/O 検証が有効になっていない場合、これらのオプションは有効になりません。
関連トピック
- ドライバー検証ツール
- Visual Studio を使用して実行時にドライバーをテストする方法
- テスト コンピューターへのドライバーの展開
- Windows デバッグの概要