共用方式為


如何將 KMDF 驅動程式轉換為 UMDF 2 驅動程式(反之亦然)

本主題描述如何將 Kernel-Mode Driver Framework (KMDF) 驅動程式轉換成 User-Mode Driver Framework (UMDF) 第 2 版驅動程式,反之亦然。

使用 Visual Studio 的驅動程式轉換

  1. 從 KMDF 切換至 UMDF 時,請在 Visual Studio 中使用 使用者模式驅動程式,空白(UMDF V2) 專案範本建立空的 UMDF 專案。 從 UMDF 切換至 KMDF 時,請在 Visual Studio 中使用 核心模式驅動程式,空白(KMDF) 專案範本建立一個空白的 KMDF 專案。

    Visual Studio 會建立具有適當設定的空白驅動程序專案,以及以指定架構為目標的 INF 檔案。

  2. 將原始碼和標頭檔從上一個驅動程式複製到新專案。

  3. 更新標頭檔案。 針對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> 
    
  4. 更新原始碼,以移除或使用 _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 回呼和方法摘要