Konvertieren eines KMDF-Treibers in einen UMDF 2-Treiber (und umgekehrt)

In diesem Thema wird beschrieben, wie Sie einen kmDF-Treiber (Kernel-Mode Driver Framework) in einen Treiber der User-Mode Driver Framework (UMDF) Version 2 konvertieren und umgekehrt.

Treiberkonvertierung mit Visual Studio

  1. Wenn Sie von KMDF zu UMDF wechseln, erstellen Sie ein leeres UMDF-Projekt in Visual Studio mithilfe der Projektvorlage Benutzermodustreiber, Leer (UMDF V2). Wenn Sie von UMDF zu KMDF wechseln, erstellen Sie ein leeres KMDF-Projekt in Visual Studio mithilfe der Projektvorlage Kernelmodustreiber, Leer (KMDF).

    Visual Studio erstellt ein leeres Treiberprojekt mit den entsprechenden Einstellungen sowie eine INF-Datei für das angegebene Framework.

  2. Kopieren Sie den Quellcode und die Headerdateien des vorherigen Treibers in das neue Projekt.

  3. Aktualisieren Sie Ihre Headerdateien. Schließen Sie für UMDF Windows.h ein. Fügen Sie für KMDF ntddk.h ein. Wdf.h ist sowohl für KMDF als auch für UMDF üblich. Schließen Sie sie daher in beide Treibertypen ein.

    Verwenden Sie optional das _KERNEL_MODE Präprozessormakro, um den richtigen Systemheader bedingt hinzuzufügen:

    #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. Aktualisieren Sie den Quellcode, um alle Funktionen, die im Zieltreibermodell nicht unterstützt werden, entweder zu entfernen oder bedingt zu kompilieren (mithilfe des _KERNEL_MODE Makros). Beispiel:

    • Wenn Ihr Treiber die WPP-Ablaufverfolgung verwendet, aktualisieren Sie das makro WPP_INIT_TRACING . Dieses Makro akzeptiert verschiedene Parameter im Benutzer- und Kernelmodus.

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

      Beachten Sie, dass Sie für UMDF 2 auch hinzufügen WPP_MACRO_USE_KM_VERSION_FOR_UM=1müssen, wie unter Aktivieren des Inflight-Ablaufverfolgungsrekorders in Visual Studio beschrieben.

    • Wenn Sie einen KMDF-Treiber konvertieren, der WDM-Routinen wie ExAllocatePoolWithTag aufruft, ersetzen Sie diese durch die entsprechenden WDF-Methoden, z. B. WdfMemoryCreate. Wenn Sie einen UMDF-Treiber konvertieren, der Benutzermodusfunktionen aufruft, ersetzen Sie diese durch entsprechende Kernelmodusroutinen.

    • Einige Methoden werden nur in KMDF unterstützt, während andere nur in UMDF unterstützt werden. Eine Liste aller WDF-Methoden (Windows Driver Frameworks) und ihrer Framework-Anwendbarkeit finden Sie unter Zusammenfassung der WDF-Rückrufe und -Methoden.