Comment convertir un pilote KMDF en pilote UMDF 2 (et vice versa)

Cette rubrique explique comment convertir un pilote KMDF (Kernel-Mode Driver Framework) en pilote User-Mode Driver Framework (UMDF) version 2, et inversement.

Conversion de pilote à l’aide de Visual Studio

  1. Lorsque vous passez de KMDF à UMDF, créez un projet UMDF vide dans Visual Studio à l’aide du modèle de projet Pilote en mode utilisateur, vide (UMDF V2). Lorsque vous passez d’UMDF à KMDF, créez un projet KMDF vide dans Visual Studio à l’aide du modèle de projet KMDF (Kernel Mode Driver, Empty).

    Visual Studio crée un projet de pilote vide avec les paramètres appropriés, ainsi qu’un fichier INF ciblé sur l’infrastructure spécifiée.

  2. Copiez le code source et les fichiers d’en-tête du pilote précédent dans le nouveau projet.

  3. Mettez à jour vos fichiers d’en-tête. Pour UMDF, incluez Windows.h. Pour KMDF, incluez Ntddk.h. Wdf.h étant commun à KMDF et UMDF, incluez-le dans les deux types de pilotes.

    Si vous le souhaitez, utilisez la macro de préprocesseur _KERNEL_MODE pour ajouter l’en-tête système approprié de manière conditionnelle :

    #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. Mettez à jour le code source pour supprimer ou compiler de manière conditionnelle (à l’aide de la macro _KERNEL_MODE ) toute fonctionnalité qui n’est pas prise en charge dans le modèle de pilote cible. Par exemple :

    • Si votre pilote utilise le suivi WPP, mettez à jour la macro WPP_INIT_TRACING . Cette macro prend différents paramètres en mode utilisateur et en mode noyau.

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

      Notez que pour UMDF 2, vous devez également ajouter WPP_MACRO_USE_KM_VERSION_FOR_UM=1, comme décrit dans Comment activer Inflight Trace Recorder dans Visual Studio.

    • Si vous convertissez un pilote KMDF qui appelle des routines WDM telles que ExAllocatePoolWithTag, remplacez-les par les méthodes WDF correspondantes, telles que WdfMemoryCreate. De même, si vous convertissez un pilote UMDF qui appelle des fonctions en mode utilisateur, remplacez-les par des routines en mode noyau équivalentes.

    • Certaines méthodes sont prises en charge uniquement dans KMDF, tandis que d’autres sont prises en charge uniquement dans UMDF. Pour obtenir la liste de toutes les méthodes WDF (Windows Driver Frameworks) et leur applicabilité, consultez Résumé des rappels et méthodes WDF.