KMDF 検証ツールの使用
このフレームワークには、実行中の KMDF ドライバーのテストに使用できる組み込みの検証機能が用意されています。 この機能は KMDF 検証ツールとも呼ばれ、ドライバーの状態と、ドライバーがフレームワーク オブジェクト メソッドに渡す引数を広範囲に検証します。 フレームワークの検証ツールは、単独で使用することも、汎用ドライバー検証ツール (Verifier.exe) ツールと共に使用することもできます。
KMDF 検証ツールが有効になっている場合、フレームワークはロックの取得と階層をチェックし、フレームワークの呼び出しが正しい IRQL で実行され手いることを確認し、正しい I/O キャンセルとキューの使用状況を検証し、ドライバーとフレームワークが文書化されたコントラクトに従っていることを確認します。 また、メモリ不足の状態もシミュレートして、ドライバーがクラッシュ、ハング、アンロードに失敗することなく適切に応答するかどうかを、ドライバー開発者がテストできます。
KMDF 検証ツールが有効になっている場合、前に説明したイベントの一部が完了する前に、既定のタイムアウト期間 60 秒が経過すると、フレームワークは中断してデバッガー移ります。 この時点で、問題をデバッグするか、デバッガーに「g」と入力してタイムアウト期間を再開できます。 既定のタイムアウト期間は、「検証ツールの動作の制御」で説明されている DbgWaitForSignalTimeoutInSec レジストリ値を使用して変更できます。
テスト中にドライバー検証ツール (Verifier.exe) を実行し、検証リストに独自のドライバーと wdf01000.sys を追加することをお勧めします。
Note
KMDF 検証ツールは、ドライバー検証ツールの /standard
設定を使用すると自動的に有効になります。 /standard
ドライバー検証ツールの設定の代わりに /flags
を使用している場合は、Windows 10 バージョン 1803 以降のビルドでは /ruleclasses
を優先して /flags
は非推奨となっていることに注意してください。 WDF のルール クラスは 34 です。 /standard
を使用しない場合にWDF 検証ツールを有効にするには、/ruleclasses 34
を使用します。
WDF 検証ツールコントロール アプリケーション (WdfVerifier.exe) を使用して、KMDF 検証ツールを有効または無効にすることもできます。
フレームワークの組み込み検証の有効化と無効化
次の手順を使用して、KMDF 検証ツールを手動で有効にすることができます。
ドライバーが既に読み込まれている場合は、デバイス マネージャーを使用してデバイスを無効にします。 デバイスを無効にすると、ドライバーがアンロードされます。
RegEdit を使用して、Windows レジストリの HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services キーの、ドライバーの Parameters\Wdf サブキーで VerifierOn を 0 以外の値に設定します。 0 以外の値は、KMDF 検証ツールが有効になっていることを示します。
サブキーがまだ存在しない場合は、手動でサブキーに VerifierOn を追加することが必要になる場合があります。
デバイス マネージャーを使用してデバイスを再び実行可能にし、ドライバーを読み込みます。
ドライバーが WdfDriverCreate を呼び出すと、フレームワークはレジストリを調べ、VerifierOn の値が 0 以外の場合にフレームワークの検証ツールを有効にします。
フレームワークの検証ツールを無効にするには、同じ手順に従いますが、VerifierOn の値を 0 に設定します。
フレームワークの検証ツールが有効になっているかどうかを確認するには、ドライバーが WdfDriverCreate を呼び出した後、場所にブレークポイントを設定し、!wdfdriverinfo デバッガー拡張機能コマンドを使用します。
!wdfkd.wdfdriverinfo <ドライバー名> **** 0x1
デバッガー拡張機能コマンドの詳細については、「Framework ベースのドライバーのデバッガー拡張機能」を参照してください。
検証ツールの動作の制御
WDF Verifier コントロール アプリケーションを使用して、以下のオプションを制御することをお勧めします。 ただし、レジストリで次の値を直接変更できます。
関連する値は、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services キーの Parameters\Wdf サブキーの下にあります。
VerifyOn (REG_DWORD)
WDFVERIFY マクロを有効にするには、この値を 0 以外の値に設定します。
DbgBreakOnError (REG_DWORD)
この値が 0 以外の値に設定されている場合、ドライバーが WdfVerifierDbgBreakPoint を呼び出すたびに、フレームワークは中断してデバッガー (使用可能な場合) に入ります。
DbgWaitForSignalTimeoutInSec (REG_DWORD)
Windows 8 以降では、VerifierOn と DbgBreakOnError がゼロ以外の値に設定されている場合、ドライバーは DbgWaitForSignalTimeoutInSec を設定することで、既定のタイムアウト期間を変更できます。
VerifierAllocateFailCount (REG_DWORD)
この値が n に設定されている場合、フレームワークは、n 番目の割り当て後にドライバーのオブジェクトにメモリを割り当てようとするたびに失敗します。
TrackHandles (REG_MULTI_SZ)
この値がフレームワーク オブジェクト ハンドルの 1 つ以上の型名のリストに設定され、VerifierOn が設定されている場合、フレームワークは、指定されたハンドル型に一致するすべてのオブジェクト ハンドルへの参照を追跡します。
EnhancedVerifierOptions (REG_DWORD)
KMDF のみ
フレームワークの検証ツールのオプション機能を有効にするために使用できるビットマップが含まれています。
VerifyDownLevel (REG_DWORD)
ゼロ以外の値に設定された場合、そしてドライバが現在のバージョンより古いバージョンのフレームワークでビルドされた場合、フレームワークのベリファイアーは、ドライバがビルドされた後に追加されたテストを含みます。
一般に、上記のレジストリ値を設定した場合は、不要になったら削除します。
これらのレジストリ値の詳細については、「フレームワークベースのドライバーをデバッグするためのレジストリ値」を参照してください。