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
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.
Copiare il codice sorgente e i file di intestazione dal driver precedente nel nuovo progetto.
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>
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.