UMDF ドライバーが大量にメモリを消費する理由の特定
警告
UMDF 2 は UMDF の最新バージョンであり、UMDF 1 に取って代わるものです。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。
アーカイブされた UMDF 1 サンプルは、Windows 11, バージョン 22H2 - 2022 年 5 月 ドライバー サンプル アップデートでご確認いただけます。
詳しくは、UMDFの概要をご覧ください。
このトピックでは、Wudfext.dll デバッガー拡張機能をユーザーモード ドライバー フレームワーク (UMDF) バージョン 1 ドライバーと組み合わせて使用して、UMDF ドライバーが過剰な量のメモリを消費する理由を判断する方法について説明します。
UMDF バージョン 2 以降では、代わりに Wdfkd.dll デバッガー拡張機能を使用する必要があります。 詳細については、 Windows ドライバー フレームワーク 拡張機能 (Wdfkd.dll)をご参照ください。
インシデントを調査するには、以下の手順のようにします。
!wudfext.wudfobject UMDF デバッガー拡張機能を使用して、オブジェクト ツリー内の未処理のオブジェクトを表示します。
!wudfext.wudfobject 拡張機能は、WDF オブジェクトとその親子関係に関する情報を表示します。 Flags パラメーターのビット 0 を 1 (0x01) に設定すると、!wudfext.wudfobject は渡されたオブジェクトをルートとするオブジェクト ツリーの再帰的ダンプを実行します。 オブジェクト ツリー全体を表示するには、次のコマンド例を使用します。
!wudfext.wudfobject <IWDFDriver*> 1
予期したよりも多くの未処理のオブジェクトが表示されるかどうかを判断します。
ドライバーは最終的にこれらのオブジェクトをリークする可能性があります (WDF オブジェクトのリークの詳細については、「ドライバーがフレームワーク オブジェクトをリークするかどうかを判断する」を参照してください)。
これらのオブジェクトはオブジェクト ツリー内に存在する可能性があるため、最終的には解放されます。 しかし、不必要に蓄積されています。 これらのオブジェクトには、次が必要な場合があります。
- 親オブジェクトの修正。
- IWDFObject::D eleteWdfObject メソッドを使用した明示的な削除。