UMDF 検証ツールの使用
このフレームワークには、実行中のユーザー モード ドライバー フレームワーク (UMDF) ドライバーのテストに使用できる組み込みの検証機能が用意されています。 この機能は UMDF 検証ツールとも呼ばれ、ドライバーの状態と、ドライバーがフレームワーク オブジェクト メソッドに渡す引数を広範囲に検証します。 UMDF 検証ツールは、単独で使用することも、汎用 アプリケーション検証ツール (AppVerif.exe) ツールと共に使用することもできます。
UMDF 検証ツール チェックロックの取得と階層、正しい I/O キャンセルとキューの使用状況を検証し、ドライバーとフレームワークが文書化されたコントラクトに従っていることを確認します。
UMDF 検証ツールにより、ホスト プロセスをバグ チェックする UMDF ドライバー コードのエラーを引き起こします。 ただし、UMDF バグ チェックでは、エラーに関する情報と共に青いテキスト画面が表示されません。 代わりに、UMDF バグチェックは、
メモリ ダンプ ファイルを作成し、ファイルをコンピューターのログ ファイル ディレクトリ (%windir%\System32\LogFiles\WUDF\Xxx.dmp など) に保存します。
注意 UMDF 2.15 以降では、ログ ディレクトリは %ProgramData%\Microsoft\WDF です。
Microsoft のエラー レポートを作成します (オプトイン)。
デバッガーがコンピューターに接続されている場合は、デバッガーに分割します。
ホスト プロセスを終了し、デバイスを無効にします。
UMDF 2.0 以降では、UMDF 検証ツールがブレークポイントを発行し、UMDF バグ チェックが発生する場合もあります。 この動作は、KMDF 検証ツールの動作と似ています。
WUDFHost.exeでアプリケーション検証ツール (AppVerif.exe) を有効にした後、ドライバーのすべての開発とテストを行うことを強くお勧めします。 次のコマンドを使用してデバッガーをアタッチし、再起動します。
AppVerif -enable Heaps Exceptions Handles Locks Memory TLS Leak -for WudfHost.exe
UMDF のバージョン 2.0 以降では、ドライバー ホスト プロセス (Wudfhost) でアプリケーション検証ツールを実行すると、そのホスト内のすべての UMDF 2.0 ドライバーと、将来のドライバー ホスト プロセスのすべての UMDF 2.0 ドライバーに対して UMDF 検証ツールが自動的に有効になります。
UMDF 1.11 以前では、フレームワークの検証ツールは常にオンであり、オフにすることはできません。
UMDF 検証ツールの有効化と無効化
UMDF 検証ツールを手動で有効にするには、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<driver name> レジストリ キーのドライバーの Parameters\Wdf サブキーで VerifierOn を 0 以外の値に設定します。
注意 VerifierOn 値が存在すると、ゼロに設定されていても、アプリケーション検証ツールとのリンケージがオーバーライドされます。 その結果、値を強制的にオンにしない場合は、値を 0 に設定するのではなく、削除することをお勧めします。
UMDF 検証ツールが有効になっているかどうかを確認するには、ドライバーが WdfDriverCreate を呼び出した後、場所にブレークポイントを設定し、!wdfdriverinfo デバッガー拡張機能コマンドを使用します。
!wdfkd.wdfdriverinfo <ドライバー名> **** 0x1
デバッガー拡張機能コマンドの詳細については、「Framework ベースのドライバーのデバッガー拡張機能」を参照してください。
検証ツールの動作の制御
レジストリの値を変更することで、UMDF 検証ツールの動作を制御できます。 または、WDF 検証ツール コントロール アプリケーションを使用してこれらの値を設定することもできます。
UMDF 1 では、次のレジストリ値を使用できます。x ドライバー、および UMDF 2.0 以降のドライバー。
VerifyDownLevel (REG_DWORD)
VerifyDownLevel が 0 以外の値に設定されていて、ドライバーが現在のバージョンより古いバージョンのフレームワークでビルドされた場合、フレームワークの検証ツールには、ドライバーのビルド後に追加されたテストが含まれます。 この値が存在しない場合、またはゼロに設定されている場合、フレームワークの検証ツールには、ドライバーのビルド時に存在していたテストのみが含まれます。
たとえば、ドライバーがフレームワークのバージョン 1.7 でビルドされていて、フレームワークのバージョン 1.9 がコンピューターにインストールされている場合、VerifyDownLevel を 0 以外に設定すると、ドライバーの実行時に検証ツールのバージョン 1.9 に追加されたテストが検証ツールに含まれます。
この値は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\DriverName レジストリ キーの Parameters\Wdf サブ キーにあります。
TrackObjects (REG_DWORD)
TrackObjects が 0 以外の値に設定されている場合、フレームワーク ベースのオブジェクトがリークした (削除されていない) 場合、ドライバーがアンロードされるときに、フレームワークはデバッガーに入ります。
定期的なテストでは、TrackRefCounts ではなく TrackObjects を有効にする必要があります。 検証ツールがドライバーがフレームワーク オブジェクトをリークしていることを報告する場合は、コントロール アプリケーションを使用して TrackRefCounts 検証ツール オプションを有効にします。
この値は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services レジストリ キーの DefaultHostProcessGuid サブキーにあります。DefaultHostProcessGuid は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF サブキーで確認できる値です。
TrackRefCounts (REG_DWORD)
TrackRefCounts が 0 以外の値に設定されている場合、フレームワークメイン各フレームワーク ベースのオブジェクトへの参照の数が保持されます。 !wudfrefhist デバッガー拡張機能を使用すると、オブジェクトの参照カウントの変更を表示できます。
TrackRefCounts を 0 以外の値に設定すると、ドライバーのパフォーマンスが低下するため、オブジェクト削除のバグをデバッグしない限り、値を 0 のままにする必要があります。
この値は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services レジストリ キーの DefaultHostProcessGuid サブキーにあります。DefaultHostProcessGuid は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF サブキーで確認できる値です。
上記のレジストリ値に加えて、UMDF 2.0 以降のドライバーでは、「KMDF 検証ツールの使用」に記載されているレジストリ値の多くを使用することもできます。