如何將 KMDF 驅動程式轉換為 UMDF 2 驅動程式(反之亦然)
本主題描述如何將 Kernel-Mode Driver Framework (KMDF) 驅動程式轉換成 User-Mode Driver Framework (UMDF) 第 2 版驅動程式,反之亦然。
使用 Visual Studio 的驅動程式轉換
從 KMDF 切換至 UMDF 時,請在 Visual Studio 中使用 使用者模式驅動程式,空白(UMDF V2) 專案範本建立空的 UMDF 專案。 從 UMDF 切換至 KMDF 時,請在 Visual Studio 中使用 核心模式驅動程式,空白(KMDF) 專案範本建立一個空白的 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,您也需要新增
WPP_MACRO_USE_KM_VERSION_FOR_UM=1
,如 如何在 Visual Studio 中啟用 Inflight Trace Recorder 追蹤錄製器 中所述。如果您要將呼叫像是 ExAllocatePoolWithTag 等 WDM 函式的 KMDF 驅動程式轉換為呼叫相應的 WDF 方法,請用像是 WdfMemoryCreate 之類的 WDF 方法取代。 同樣地,如果您要轉換呼叫使用者模式函式的 UMDF 驅動程式,請將這些驅動程式取代為對等的核心模式例程。
某些方法僅支援 KMDF,而其他方法則僅支援 UMDF。 如需所有 Windows 驅動程式框架 (WDF) 方法及其框架適用性的清單,請參閱 WDF 回呼和方法摘要。