このトピックでは、Kernel-Mode Driver Framework (KMDF) ドライバーを User-Mode Driver Framework (UMDF) バージョン 2 ドライバーに変換する方法について説明します。その逆も同様です。
Visual Studio を使用したドライバー変換
KMDF から UMDF に切り替える場合は、 ユーザー モード ドライバー、空 (UMDF V2) プロジェクト テンプレートを使用して、Visual Studio で空の UMDF プロジェクトを作成します。 UMDF から KMDF に切り替える場合は、 カーネル モード ドライバー 、空 (KMDF) プロジェクト テンプレートを使用して、Visual Studio で空の KMDF プロジェクトを作成します。
Visual Studio では、指定したフレームワークを対象とする INF ファイルと共に、適切な設定で空のドライバー プロジェクトが作成されます。
前のドライバーのソース コードとヘッダー ファイルを新しいプロジェクトにコピーします。
ヘッダー ファイルを更新します。 UMDF の場合は、Windows.h を含めます。 KMDF の場合は、Ntddk.h を含めます。 Wdf.h は KMDF と UMDF の両方に共通であるため、両方の種類のドライバーに含めます。
必要に応じて、 _KERNEL_MODE プリプロセッサ マクロを使用して、適切なシステム ヘッダーを条件付きで追加します。
#ifndef _KERNEL_MODE // This is a user-mode driver #include <windows.h> #else // This is a kernel-mode driver #include <ntddk.h> #define NTSTRSAFE_LIB #include <ntstrsafe.h> #endif // This is a common WDF header (for both KMDF and UMDF) #include <wdf.h>
ソース コードを更新して、ターゲット ドライバー モデルでサポートされていない機能を ( _KERNEL_MODE マクロを使用して) 削除または条件付きでコンパイルします。 例えば次が挙げられます。
ドライバーが WPP トレースを使用している場合は、 WPP_INIT_TRACING マクロを更新します。 このマクロは、ユーザー モードとカーネル モードで異なるパラメーターを受け取ります。
WPP_INIT_TRACING ( DriverObject, RegistryPath ); // KMDF and UMDF 2 WPP_INIT_TRACING ( “<MyDriverNameString>” ); // UMDF 1
UMDF 2 の場合は、「Visual Studio でインフライト トレース レコーダーを有効にする方法」の説明に従って、
WPP_MACRO_USE_KM_VERSION_FOR_UM=1
も追加する必要があることに注意してください。ExAllocatePoolWithTag などの WDM ルーチンを呼び出す KMDF ドライバーを変換する場合は、WdfMemoryCreate などの対応する WDF メソッドに置き換えます。 同様に、ユーザー モード関数を呼び出す UMDF ドライバーを変換する場合は、同等のカーネル モード ルーチンに置き換えます。
KMDF でのみサポートされるメソッドもあれば、UMDF でのみサポートされるメソッドもあります。 すべての Windows Driver Framework (WDF) メソッドとそのフレームワークの適用性の一覧については、「 WDF コールバックとメソッドの概要」を参照してください。