共用方式為


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

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

使用 Visual Studio 的驅動程式轉換

  1. 從 KMDF 切換至 UMDF 時,請使用 使用者模式驅動程式、空白 (UMDF V2) 項目範本,在 Visual Studio 中建立空的 UMDF 專案。 從UMDF切換至 KMDF 時,使用 核心模式驅動程式、空白 (KMDF) 項目範本,在Visual Studio中建立空的 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 追蹤錄製器中所述。

    • 如果您要轉換呼叫 ExAllocatePoolWithTag 等 WDM 例程的 KMDF 驅動程式,請將這些驅動程式取代為對應的 WDF 方法,例如 WdfMemoryCreate。 同樣地,如果您要轉換呼叫使用者模式函式的 UMDF 驅動程式,請將這些驅動程式取代為對等的核心模式例程。

    • 某些方法僅在 KMDF 中受到支援,而其他方法則僅支援於 UMDF 中。 如需所有 Windows 驅動程式架構的清單, (WDF) 方法和其架構適用性,請參閱 WDF 回呼和方法的摘要