Come convertire un driver KMDF in un driver UMDF 2 (e viceversa)

Questo argomento descrive come convertire un driver Kernel-Mode Driver Framework (KMDF) in un driver User-Mode Driver Framework (UMDF) versione 2 e viceversa.

Conversione driver con Visual Studio

  1. Quando si passa da KMDF a UMDF, creare un progetto UMDF vuoto in Visual Studio usando il modello di progetto Driver modalità utente, Vuoto (UMDF V2). Quando si passa da UMDF a KMDF, creare un progetto KMDF vuoto in Visual Studio usando il modello di progetto Kernel Mode Driver, Empty (KMDF).

    Visual Studio crea un progetto driver vuoto con le impostazioni appropriate, insieme a un file INF destinato al framework specificato.

  2. Copiare il codice sorgente e i file di intestazione dal driver precedente nel nuovo progetto.

  3. Aggiornare i file di intestazione. Per UMDF, includere Windows.h. Per KMDF includere Ntddk.h. Wdf.h è comune sia a KMDF che a UMDF, quindi includerlo in entrambi i tipi di driver.

    Facoltativamente, usare la macro del preprocessore _KERNEL_MODE per aggiungere l'intestazione di sistema corretta in modo condizionale:

    #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. Aggiornare il codice sorgente per rimuovere o compilare in modo condizionale (usando la macro _KERNEL_MODE ) tutte le funzionalità non supportate nel modello di driver di destinazione. Ad esempio:

    • Se il driver usa la traccia WPP, aggiornare la macro WPP_INIT_TRACING . Questa macro accetta parametri diversi in modalità utente e kernel.

      WPP_INIT_TRACING ( DriverObject, RegistryPath ); // KMDF and UMDF 2
      WPP_INIT_TRACING ( “<MyDriverNameString>” ); // UMDF 1
      

      Si noti che per UMDF 2 è anche necessario aggiungere WPP_MACRO_USE_KM_VERSION_FOR_UM=1, come descritto in Come abilitare Registrazione traccia in volo in Visual Studio.

    • Se si converte un driver KMDF che chiama routine WDM, ad esempio ExAllocatePoolWithTag, sostituirle con i metodi WDF corrispondenti, ad esempio WdfMemoryCreate. Analogamente, se si converte un driver UMDF che chiama le funzioni in modalità utente, sostituirle con routine equivalenti in modalità kernel.

    • Alcuni metodi sono supportati solo in KMDF, mentre altri sono supportati solo in UMDF. Per un elenco di tutti i metodi WDF (Windows Driver Framework) e la relativa applicabilità al framework, vedere Riepilogo dei callback e dei metodi WDF.