次の方法で共有


KMDF 検証ツールの使用

このフレームワークには、実行中の KMDF ドライバーのテストに使用できる組み込みの検証機能が用意されています。 KMDF 検証ツールと呼ばれるこの機能は、ドライバーの状態と、ドライバーがフレームワーク オブジェクト メソッドに渡す引数を広範囲に検証します。 フレームワークの検証ツールは、単独で使用することも、汎用 ドライバー検証ツール (Verifier.exe) ツールと共に使用することもできます。

KMDF 検証ツールが有効になっている場合、フレームワークはロックの取得と階層をチェックし、フレームワークへの呼び出しが正しい IRQL で行われることを確認し、正しい I/O キャンセルとキューの使用状況を検証し、ドライバーとフレームワークが文書化されたコントラクトに従っていることを確認します。 また、メモリ不足の状態をシミュレートして、ドライバー開発者がドライバーがクラッシュ、ハング、アンロードに失敗することなく適切に応答するかどうかをテストすることもできます。

KMDF 検証ツールが有効になっている場合、前に説明したイベントの一部が完了する前に、既定のタイムアウト期間 60 秒が経過すると、フレームワークはデバッガーに中断されます。 この時点で、問題をデバッグするか、デバッガーに「g」と入力してタイムアウト期間を再開できます。 既定のタイムアウト期間は、「検証ツールの動作の制御」で説明されている DbgWaitForSignalTimeoutInSec レジストリ値を使用して変更できます。

テスト中にドライバー検証ツール (Verifier.exe) を実行し、検証リストに独自のドライバーと wdf01000.sys を追加することをお勧めします。

KMDF 検証ツールは、ドライバー検証ツールの /standard 設定を使用すると自動的に有効になります。 /standard ドライバー検証ツールの設定の代わりに/flagsを使用している場合は、Windows 10 バージョン 1803 以降のビルドでは、/ruleclassesを優先して/flagsは非推奨であることに注意してください。 WDF のルール クラスは 34 です。 /standardが使用されていないときに WDF 検証ツールを有効にするには、/ruleclasses 34を使用します。

WDF 検証ツール コントロール アプリケーション (WdfVerifier.exe) を使用して、KMDF 検証ツールを有効または無効にすることもできます。

フレームワークの組み込み検証の有効化と無効化

次の手順を使用して、KMDF 検証ツールを手動で有効にすることができます。

  1. ドライバーが既に読み込まれている場合は、デバイス マネージャーを使用してデバイスを無効にします。 デバイスを無効にすると、ドライバーがアンロードされます。

  2. RegEdit を使用して、Windows レジストリの HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services キーのドライバーの Parameters\Wdf サブキーで VerifierOn を 0 以外の値に設定します。 0 以外の値は、KMDF 検証ツールが有効になっていることを示します。

    サブキーがまだ存在しない場合は、手動でサブキーに VerifierOn を追加することが必要になる場合があります。

  3. デバイス マネージャーを使用してデバイスを再び実行可能にし、ドライバーを読み込みます。

  4. ドライバーが 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 以降では、 VerifierOnDbgBreakOnError が 0 以外の値に設定されている場合、ドライバーは DbgWaitForSignalTimeoutInSec を設定することで、既定のタイムアウト期間を変更できます。

VerifierAllocateFailCount (REG_DWORD)
この値が n に設定されている場合、フレームワークは、 n 番目 の割り当て後にドライバーのオブジェクトにメモリを割り当てようとするたびに失敗します。

TrackHandles (REG_MULTI_SZ)
この値がフレームワーク オブジェクト ハンドルの 1 つ以上の型名の一覧に設定されている場合、フレームワークは、指定されたハンドル型に一致するすべてのオブジェクト ハンドルへの参照を追跡します。

EnhancedVerifierOptions (REG_DWORD)
KMDF のみ

フレームワークの検証ツールのオプション機能を有効にするために使用できるビットマップが含まれています。

VerifyDownLevel (REG_DWORD)
0 以外の値に設定し、ドライバーが現在のバージョンより古いバージョンのフレームワークでビルドされた場合、フレームワークの検証ツールには、ドライバーのビルド後に追加されたテストが含まれます。

一般に、上記のレジストリ値を設定した場合は、不要になったら削除します。

これらのレジストリ値の詳細については、「 フレームワーク ベースのドライバーをデバッグするためのレジストリ値」を参照してください。