次の方法で共有


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 検証ツールの使用」に記載されているレジストリ値の多くを使用することもできます。