ドライバー検証ツールのオプションとルール クラス

このトピックでは、ドライバー検証ツール内のオプションの機能とルール クラスについて説明します。 標準設定を使用する場合に含まれるオプションの一覧については、「標準設定」を参照してください。

Note

一部の自動チェックは、選択されているオプションに関係なく、検証中のドライバーで常に実行されます。 ドライバーが不適切な IRQL でメモリを使用している場合、ドライバー検証ツールは、スピン ロックとメモリ割り当ての不適切な呼び出しや解放、スタックの不適切な切り替え、タイマーを最初に削除しないままのメモリ プールの解放などの動作を検出します。 ドライバーがアンロードされると、ドライバー検証ツールは、リソースが適切に解放されたことを確認します。

/ruleclasses を使用したルール クラスの有効化

Windows 10 バージョン 17627 以降では、次の構文を使用してルール クラスを有効にすることができます。

/ruleclasses or /rc [<ruleclass_1> <ruleclass_2> ... <ruleclass_k>]

複数のクラス (以下に正の 10 進整数で表されています) を有効にする場合は、各整数をスペース文字で区切ります。

これらのルール クラスの説明については、以下を参照してください。

標準ルール クラス

ルール クラス 10 進 ID
特別なプール 1
強制 IRQL 検査 2
プールのトラック 4
I/O の検証 5
デッドロックの検出 6
DMA チェック 8
セキュリティの検査 9
その他の検査 12
DDI 準拠の検査 18
WDF の検証 34

その他のルール クラス

これらのルール クラスは、特定のシナリオのテストを目的としています。 (*) が付いているルール クラスでは、自動的に有効になる I/O 検証が必要です (5)。 (**) が付いているフラグは、個々のルールの無効化をサポートします。

ルール クラス 10 進 ID
ランダム化された低リソース シミュレーション 3
保留中の I/O 要求を強制する (*) 10
IRP ログ 11
スタックの不変 MDL チェック (*) 14
ドライバーの不変 MDL チェック (*) 15
Power Framework 遅延ファジー テスト 16
ポート/ミニポート インターフェイス チェック 17
体系的な低リソースのシミュレーション 19
DDI コンプライアンス チェック (追加) 20
カーネル同期遅延ファジー テスト 24
VM スイッチ検証 25
コードの整合性チェック 26
ドライバーの分離チェック (36 が必要) 33
その他の IRQL チェック 35
DIF を有効にする 36

オプションの機能とルール クラスの説明

特別なプール

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

強制 IRQL 検査

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

低リソース シミュレーション (Windows 8.1 ではランダム化低リソース シミュレーションと呼ばれます)

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

プールの追跡

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

I/O の検証

このオプションがアクティブな場合、ドライバー検証ツールは、特別なプールからドライバーの IRP を割り当て、ドライバーの I/O 処理を監視します。 これにより、I/O ルーチンの不正な使用または矛盾した使用が検出されます。

デッドロックの検出

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

拡張 I/O 検証

このオプションがアクティブな場合、ドライバー検証ツールは、いくつかの I/O マネージャー ルーチンの呼び出しを監視し、PnP IRP、電源 IRP、および WMI IRP のストレス テストを実行します。 Windows 7 以降のバージョンの Windows オペレーティング システムでは、拡張 I/O 検証のすべての機能が I/O 検証の一部として含まれており、ドライバー検証ツール マネージャーまたはコマンド ラインからこのオプションを選択する必要がなくなりました。

DMA 検証

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

セキュリティの検査

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

その他の検査

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

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

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

IRP ログ

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

レポート検証

(Windows Vista 以降) このオプションがアクティブな場合、ドライバー検証ツールは、エクスポートされた Storport ルーチンの不適切な使用、過剰な遅延、および Storport 要求の不適切な処理について、Storport ミニポート ドライバーを監視します。

Power Framework 遅延ファジー テスト

(Windows 8 以降) このオプションがアクティブな場合、ドライバー検証ツールは、スレッド スケジュールをランダム化します。これは、電源管理フレームワーク (PoFx) を使用するドライバーのコンカレンシー エラーをフラッシュするのに役立ちます。 このオプションは、電源管理フレームワーク (PoFx) を直接利用しないドライバーには推奨されません。

DDI 準拠の検査

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

不変な MDL のスタック用検査

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

不変な MDL のドライバー用検査

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

スタック ベースのエラー挿入

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

体系的な低リソースのシミュレーション

(Windows 8.1 以降) 体系的な低リソースのシミュレーション オプションは、カーネル モード ドライバーにリソース障害を挿入します。

NDIS/WIFI 検証

(Windows 8.1 以降) このオプションがアクティブな場合、ドライバー検証ツールは、NDIS ミニポート ドライバーとオペレーティング システム カーネルの間の適切な相互作用をチェックする、NDIS とワイヤレス LAN (WIFI) のルールのセットを適用します。

カーネル同期遅延ファジー テスト

(Windows 8.1 以降) これは、スレッド スケジュールをランダム化するオプションで、ドライバー内のコンカレンシーのバグを検出するのに役立ちます。

VM スイッチ検証

(Windows 8.1 以降) このオプションは、Hyper-V 拡張可能スイッチ内で実行されるフィルター ドライバー (拡張可能スイッチ拡張機能) を監視します。

ポート/ミニポート インターフェイス チェック

ポート/ミニポート インターフェイス チェックにより、ドライバー検証ツールは、PortCls.sys とそのオーディオ ミニポート ドライバーの間の DDI インターフェイスを、ks.sys とその AVStream ミニポート ドライバーと共に検査できます。 「AVStream ドライバーのルール」と「オーディオ ドライバーのルール」を参照してください。

コード整合性チェック

HVCI では、仮想化ベースのセキュリティを使って、コード整合性を分離します。カーネル メモリが実行できるようになる唯一の方法は、コード整合性の検証にパスすることです。 つまり、カーネル メモリ ページを書き込み可能にすることはできず、実行可能ファイル (W+ X) と実行可能コードを直接変更することはできません。 コード整合性チェックにより、これらのコード整合性ルールの互換性が確保され、違反が検出されます。

WDF による認証

WDF 検証は、カーネル モード ドライバーがカーネル モード ドライバー フレームワーク (KMDF) の要件に適切に従っているかどうかをチェックします。

その他の IRQL チェック

追加の IRQL チェックにより、PASSIVE_LEVEL の DDI コンプライアンス チェック IRQL ルールが強化されます。 これには次の 2 つのルールが含まれています。

  • IrqlIoRtlZwPassive ルールは、ドライバーが IRQL = PASSIVE_LEVEL で実行されている場合にのみ、ルールに記載されている DDI を呼び出すことを指定します。
  • IrqlNtifsApcPassive ルールは、ドライバーが IRQL = PASSIVE_LEVEL または IRQL= <APC_LEVEL で実行されている場合にのみ、ルールに記載されている DDI を呼び出すことを指定します。

ドライバーの分離チェック

ドライバーの分離チェックは、Windows ドライバーのランタイム ドライバー パッケージ分離要件を検証するために重要です。詳細については、「Windows ドライバーの概要」を参照してください。 チェックでは、分離されたドライバー パッケージに対して許可されていないレジストリの読み取りと書き込みを監視します。

基本的な設定

標準設定に含まれるオプション

特別なプール

強制 IRQL 検査

プールの追跡

I/O の検証

デッドロックの検出

拡張 I/O 検証 (Windows 7 以降では、I/O 検証を選択すると、このオプションが自動的にアクティブ化されます)

DMA 検証

セキュリティの検査

その他のチェック (Windows Vista 以降)

DDI コンプライアンス チェック (Windows 8 以降)

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

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