ドライバー パッケージ プロジェクトのドライバーの検証ツール プロパティ

ドライバの検証は、ドライバー テストの効率を高める実行時検証ツールです。 テスト用にドライバーを展開するときに、すべてのテスト コンピューターで実行されるようにドライバの検証を有効にして構成できます。

リモートテストコンピューターでドライバの検証を有効にする場合は、常にテストコンピューターとのカーネル モード デバッグ接続をセットアップする必要があります。 ターゲット コンピューターの構成と、デバッグ ケーブルの設定について詳しくは、「Windows のデバッグの概要」をご覧ください。

ドライバー パッケージ プロジェクトのドライバー検証ツール プロパティの設定

  1. ドライバーパッケージのプロパティ ページを開きます。 ソリューション エクスプローラーでドライバー パッケージ プロジェクトを長押し (または右クリック) し、[プロパティ] を選びます。
  2. ドライバー パッケージのプロパティ ページで、[構成プロパティ][ドライバーのインストール][ドライバーの検証] の順に選びます。
  3. ドライバーの検証を有効にするオプションを選択します。 このオプションを選択すると、テスト コンピューターで検証するドライバーを選択したり、使用するドライバー検証オプションを選択したりできます。

プロジェクト構成とプラットフォーム

構成リストとプラットフォーム リストを使用すると、さまざまなプロジェクト構成とプラットフォームの組み合わせにさまざまな展開設定を適用できます。 たとえば、デバッグビルドの展開オプションのセットを使用して1台のテストコンピューターにドライバーを展開し、リリース ビルドの展開オプションを使用して別のテストコンピューターにドライバーを展開できます。

Enable Driver Verifier (ドライバーの検証ツールの有効化)

テストコンピューター上のドライバー検証ツールは、コンピューター上のすべてのドライバー、ドライバープロジェクトのみ、または指定したドライバーのリストに対して有効にすることができます。 たとえば、特定のデバイスのスタック上のドライバーのセットに対して ドライバー検証を有効にすることができます。

Verify Drivers (ドライバーの検証)

テストコンピューターで検証するドライバーを指定します。

All Drivers (すべてのドライバー)
ドライバー検証がリモートテストコンピューターにインストールされているすべてのドライバーを検証することを指定します。

Project Output (プロジェクトの出力)
ドライバー検証がリモート テスト コンピューターにインストールされているドライバー プロジェクトを検証することを指定します。 既定のオプションです。

Driver List (ドライバーの一覧)
ドライバー検証がリモート テスト コンピューター上で検証するドライバーまたはドライバーのリストを指定します。 たとえば、特定のデバイスに関連付けられているすべてのドライバーを一覧表示できます。 ドライバーをバイナリ名 (例: Driver.sys) で指定します。 ドライバーのリストを区切るにはセミコロンを使用します。 ワイルドカード値 (たとえば、n*.sys) は、サポートされていません。

ドライバー検証ツールの標準フラグ

テスト コンピューターでは、次のドライバー検証のオプションを構成できます。

  • DDI 準拠チェック中 (Windows 8)

    このオプションがアクティブな場合、ドライバー検証ツールは、ドライバーとオペレーティング システムのカーネル インターフェイス間の適切な相互作用をチェックする一連のデバイス ドライバー インターフェイス (DDI) ルールを適用します。

  • デッドロックの検出

    このオプションがアクティブな場合、ドライバー検証はドライバーによるスピン ロック、ミューテックス、および高速ミューテックスの使用を監視します。 これにより、ドライバーのコードがある時点でデッドロックを引き起こす可能性があるかどうかが検出されます。

  • DMA の検証

    このオプションがアクティブな場合、ドライバー検証はドライバーによるダイレクトメモリ アクセス (DMA)ルーチンの使用を監視します。 これにより、DMA バッファ、アダプタ、マップ レジスタの不適切な使用が検出されます。

  • 強制 IRQL 検査

    このオプションがアクティブな場合、ドライバー検証はページング可能なコードを無効にすることにより、ドライバーに極度のメモリ負荷をかけます。 ドライバーが間違った IRQL で、またはスピン ロックを保持しているときにページ メモリにアクセスしようとすると、ドライバー検証はこの動作を検出します。

  • I/O の検証

    このオプションがアクティブな場合、ドライバー検証は特別なプールからドライバーの割り込み要求パケット (IRP) を割り当て、ドライバーの I/O 処理を監視します。 これにより、I/O ルーチンの不正な使用または矛盾した使用が検出されます。 ドライバー検証は、いくつかの I/O マネージャー ルーチンの呼び出しも監視し、プラグ アンド プレイ (PnP) IRP、電源 IRP、および WMI IRP のストレス テストを実行します。

  • その他の検査

    このオプションがアクティブな場合、ドライバー検証は、解放されたメモリの誤った処理など、ドライバー クラッシュの一般的な原因を探します。

  • プールのトラック

    このオプションがアクティブな場合、ドライバー検証は、ドライバーのアンロード時にドライバーがすべてのメモリ割り当てを解放したかどうかを確認します。 これにより、メモリ リークが明らかになります。

  • セキュリティの検査

    このオプションがアクティブな場合、ドライバー検証は、カーネル モード ルーチンによるユーザー モード アドレスへの参照など、セキュリティの脆弱性を引き起こす可能性のある一般的なエラーを探します。

  • 特別なプールの検査

    このオプションがアクティブな場合、ドライバー検証はドライバーのメモリ要求のほとんどを特別なプールから割り当てます。 この特別なプールは、メモリオーバーラン、メモリアンダーラン、および解放後にアクセスされるメモリが監視されます。

ドライバーの検証ツールのシナリオ固有の設定

  • 低リソースのシミュレーション

    このオプションがアクティブな場合、ドライバー検証はプール割り当て要求およびその他のリソース要求をランダムに失敗させます。 これらの割り当てエラーをシステムに挿入することで、ドライバー検証は、リソース不足の状況に対処するドライバーの能力をテストします。

  • 保留中の I/O 要求を強制する

    このオプションがアクティブになっていると、ドライバー検証ツールはランダムな IoCallDriver の呼び出しに STATUS_PENDING を返すことによって、STATUS_PENDING 戻り値へのドライバーの応答をテストします。

  • IRP ログ

    このオプションがアクティブな場合、ドライバー検証はドライバーによるIRPの使用を監視し、IRP使用のログを作成します。

  • スタックの不変MDLチェック (Windows 8)

    スタックの不変 MDL チェック]オプションは、ドライバーがドライバー スタック全体で不変 MDL バッファーを処理する方法を監視します。 ドライバー検証は、不変 MDL バッファーの不正な変更を検出できます。 このオプションを使用するには、少なくとも 1 つのドライバーで I/O 検証を有効にする必要があります。

  • ドライバーの不変 MDLチェック (Windows 8)

    ドライバーの不変MDLチェックオプションは、ドライバーがドライバーごとに不変 MDLバッファーを処理する方法を監視します。 このオプションは、不変MDLバッファの不正な変更を検出します。 このオプションを使用するには、少なくとも 1 つのドライバーで I/O 検証を有効にする必要があります。

  • パワーフレームワークの遅延ファジング (Windows 8)

    このオプションがアクティブな場合、ドライバー検証はスレッド スケジュールをランダム化し、ドライバー内の同時実行エラーをフラッシュします。

  • スタックベースの障害挿入 (Windows 8)

    スタックベースの障害挿入オプションは、カーネル モード ドライバーにリソース障害を挿入します。 このオプションでは、特別なドライバー KmAutoFail.sys をドライバー検証と組み合わせて使用し、ドライバーのエラー処理パスを通過します。

    [Stack Based Failure Injection]\(スタック ベースのエラー挿入\)[低リソースのシミュレーション] を組み合わせることはできません。

I/O の検証を必要とするドライバーの検証ツールのオプション

最初に I/O検証を有効にする必要があるオプションが4つあります。 I/O 検証が有効になっていない場合、これらのオプションは有効になりません。