Windows 10 の WDF ドライバーの新機能

このトピックでは、Windows 10 の Windows Driver Frameworks (WDF) の新機能と機能強化についてまとめています。

Windows Server 2022 には、カーネル モード ドライバー フレームワーク (KMDF) バージョン 1.33 とユーザー モード ドライバー フレームワーク (UMDF) バージョン 2.33 が含まれます。

これらのフレームワーク バージョンを使用し、次のドライバーを構築できます。

  • Windows 10 (すべての SKU)
  • Windows Server 2022

バージョン履歴については、「KMDF バージョン履歴」と「UMDF バージョン履歴」を参照してください。 注記のあるものを除き、このページの UMDF 参照は、UMDF バージョン 1 では利用できないバージョン 2 の機能を表します。

Windows Server 2022 用の WDF の新機能

KMDF バージョン履歴」と「UMDF バージョン履歴」を参照してください。

Windows 10 バージョン 2004 用の WDF の新機能

KMDF バージョン履歴」と「UMDF バージョン履歴」を参照してください。

Windows 10、バージョン 1903 の WDF の新機能

追加または変更された機能はありません。

Windows 10、バージョン 1809 の WDF の新機能

Windows 10、バージョン 1803 の WDF の新機能

Windows 10、バージョン 1709 の WDF の新機能

KMDF バージョン履歴」と「UMDF バージョン履歴」を参照してください。

Windows 10、バージョン 1703 の WDF の新機能

Windows 10、バージョン 1703 では、WDF に以下の機能強化が含まれています。

  • 過度のオブジェクト作成を検出する新しい WDF 検証ツール設定

    フレームワーク オブジェクトの親が正しく設定されず、使用後に削除されない場合があります。 この機能を利用すると、オブジェクトの最大数やこのしきい値を超過したときの動作を指定できます。

    監視を始めるには、次の場所に以下のレジストリ値を追加します。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\<driver service>\Parameters\wdf

    1. しきい値と共に ObjectLeakDetectionLimit という名前の DWORD 値を追加します。 これは ObjectsForLeakDetection キーで説明されている種類のオブジェクトの最大数です。

    2. ObjectsForLeakDetection という名前の新しい REG_MULTI_SZ 値を追加します。これは検証する各種類の名前を一覧表示します。 たとえば、WDFDMATRANSACTION WDFDEVICE を指定できます。 ハンドルの型をすべて指定するには、文字列として * を使用します。

    3. このしきい値を超えた場合にデバッグ解除かバグチェックを実行するかどうかを制御するには、DbgBreakOnError キーを設定します。

      既定では、ObjectsForLeakDetection キーが指定されない場合、フレームワークによって WDFREQUEST、WDFWORKITEM、WDFKEY、WDFSTRING、WDFOBJECT、WDFDEVICE が監視されます。

      上限はインストールされているデバイスの数によって変化します。そのため、ドライバーによって 3 つの WDFDEVICE オブジェクトが作成される場合、WDF 検証ツールの上限は ObjectLeakDetectionLimit に指定されている値の 3 倍になります。

      WDFREQUEST を指定した場合、検索ツールでは、ドライバーによって作成される WDFREQUEST オブジェクトの数だけが数えられます。

      この機能は現在のところ、WDFMEMORY オブジェクトを追跡できます。

  • SleepStudy ツールから KMDF ドライバーに関する情報が提供される

    SleepStudy ソフトウェア ツールからは、システムがスリープに入ることを防ぐ、KMDF ドライバーの電源参照の数が報告されます。 詳細については、「モダン スタンバイの SleepStudy」を参照してください。

このページの残りでは、Windows 10、バージョン 1507 で追加された機能について説明します。

WDF ソース コードが公開中

  • WDF ソース コードは GitHub でオープン ソースとして入手できます。 これは、Windows 10 に付属する WDF ランタイム ライブラリのソース コードと同じです。 ドライバーと WDF のやりとりを追跡できるとき、ドライバーをさらに効果的にデバッグできます。 https://github.com/Microsoft/Windows-Driver-Frameworks からダウンロードしてください。

  • Windows 10 の WDF のプライベート シンボル ファイルが Microsoft Symbol Server から入手できるようになりました。

  • Windows Driver Kit (WDK) 10 サンプルも GitHub に公開されています。 https://github.com/Microsoft/Windows-Driver-Samples からダウンロードしてください。

フレームワーク コードの自動ソース レベル デバッグ

WinDbg を使用して Windows 10 の WDF ドライバーをデバッグするとき、WinDbg によって Microsoft のパブリック GitHub リポジトリからフレームワーク ソース コードが自動的に取得されます。 この機能を利用することで、デバッグ中に WDF ソース コードをステップ実行したり、ローカル マシンにソース コードをダウンロードせず、フレームワークの内部に関する情報を取得したりできます。 詳細については、「WDF ソースでのデバッグ動画:Debugging your driver with WDF source code」 (動画: WDF ソース コードでドライバーをデバッグする) を参照してください。

ユニバーサル ドライバー コンプライアンス

WDF ドライバーのサンプルと Visual Studio ドライバーのテンプレートはすべて、ユニバーサル Windows ドライバーに準拠しています。

KMDF と UMDF 2 の機能はすべて、ユニバーサル Windows ドライバーに準拠しています。

UMDF 1 ドライバーは、Windows 10 デスクトップ エディションとそれ以前のデスクトップ版 Windows でのみ動作します。 UMDF 2 のユニバーサル機能を活用しますか。 以前の UMDF 1 ドライバーを移植する方法については、「UMDF 1 から UMDF 2 にドライバーを移植する」を参照してください。

デバッグと診断

  • すべての KMDF ドライバーと UMDF 2 ドライバーで、常にオンで常に利用できる Inflight Trace Recorder (IFR) を使用できます。 ドライバーからカスタム トレースが与えられるとき、ドライバー IFR ログにはトレース メッセージが含まれます。 新しいドライバー IFR ログは、ドライバーごとに WDF によって作成されるフレームワーク IFR ログとは分かれていることに注目してください。

    IFR は簡単にオンにできます。 「トレースをログに記録するための Inflight Trace Recorder (IFR)」と「KMDF ドライバーと UMDF ドライバーで Inflight Trace Recorder を使用する」を参照してください。

  • IFR によって、ページングできないメモリの WPP トレースの循環バッファーが保守管理されます。 ドライバーがクラッシュする場合、クラッシュ ダンプ ファイルにログが入っていることがたびたびあります。

  • ドライバー バイナリで IFR をオンにすると、ドライバーが使われている間、IFR は存在し、動作します。 トレース収集セッションを明示的に開始する必要はありません。

    • IFR ログは、それを担当するドライバーが不明の場合やクラッシュがホストのタイムアウトであった場合を除き、ミニダンプ ファイルに入ります。

    • デバッガーを接続している場合、 !wdfkd.wdflogdump を発行することでドライバーとフレームワークの両方の IFR ログにアクセスできます。

    • デバッガーを接続していない場合でも両方のログにアクセスできます。 方法については、「デバッガーなしでドライバー IFR ログにアクセスする」 を参照してください。

    • UMDF ドライバーをデバッグするとき、 !wdfkd.wdflogdump <drivername.dll> -m を発行することでフレームワーク ログとドライバー ログを結合できます。

  • UMDF ログ (WudfTrace.etl) とダンプは、%ProgramData%\Microsoft\WDF instead of %systemDrive%\LogFiles\Wudf に置かれるようになりました。

  • 新しいデバッガー コマンド !wdfkd.wdfumtriage を実行すると、システムの全 UMDF デバイスをカーネルを中心として表示できます。

  • !analyze を実行すると、UMDF 検証ツールの失敗や UMDF の未処理例外を調査できます。 これはライブ カーネル デバッグと、 %ProgramData% \Microsoft\WDF からのユーザー クラッシュ ダンプ ファイルのデバッグで機能します。

  • KMDF と UMDF 2 では、デバッガーの電源参照使用を監視できます。 詳細については、「WDF を使用した Power 参照リークのデバッグ」を参照してください。

  • !wdfkd.wdfcrashdump を使用すると、UMDF 2 ドライバーに関するエラー情報を表示できます。 詳細については、「 !wdfkd.wdfcrashdump」を参照してください。

WDF ドライバーのパフォーマンス トレース ツール

Windows Performance Toolkit (WPT) を使用すると、所与の KMDF または UMDF 2 ドライバーのパフォーマンス データを表示できます。 トレースを有効にすると、フレームワークによって I/O、PnP、電源コールバック パスの ETW イベントが生成されます。 その後、I/O スループット レート、CPU 利用率、コールバック パフォーマンスを示す Windows Performance Analyzer (WPA) でグラフを表示できます。 WPT は Windows アセスメント & デプロイメント キット (ADK) に含まれています。

詳細については、「WDF での Windows Performance Toolkit (WPT) の使用」をご覧ください。

UMDF の HID ドライバー向け追加サポート

  • UMDF は、HID フィルター (HIDClass によって列挙) とミニドライバーに完全対応しています。 既存の KMDF ドライバーを移植するか、新しい UMDF 2 フィルターを記述します。機能は自動的に有効になります。

  • ACPI によって列挙される UMDF HID ミニドライバーでは、選択的に中断できます。 詳細については、「WDF HID ミニドライバーの作成」を参照してください。

  • UMDF ドライバーを HID スタックにインストールし、タッチやマウスなど、入力デバイスの遅延を少なくすることができるようになりました。 入力デバイスのドライバーでは、UmdfHostPriority INF ディレクティブを指定する必要があります。 詳細については、「INF ファイルでの WDF ディレクティブの指定」を参照してください。

GPIO でバックアップされるデバイスの割り込みをサポート

UMDF では WinUSB が不要になる

UMDF には、USB ドライバーの新しいサポートが追加されました。 UMDF 2 USB ドライバーでは WinUSB が使われなくなりました。 新しい機能を使用するために、ドライバーによって WinUSB ではなく NativeUSBUmdfDispatcher ディレクティブが設定されます。 「Specifying WDF Directives in INF Files」 (INF ファイルに WDF ディレクティブを指定する) を参照してください。

パフォーマンスの向上

  • UMDF システム コンポーネントによるディスク領域の使用量が少なくなりました。

  • KMDF ドライバーと UMDF ドライバーでは、非ページ メモリの使用量が少なくなりました。

  • フレームワーク バージョンのチェック機能が改善され、ヘッダー/ライブラリの不一致が減りました。

  • UMDF の HID 転送のバッファー マッピングが改善されました。