Création de minidrivers WDF HID

Cette rubrique explique comment créer un minidriver HID (Human Interface Device) à l’aide de Windows Driver Frameworks (WDF).

Vous pouvez écrire un minidriver HID à l’aide de KMDF ou UMDF. Nous vous recommandons de commencer par l’exemple de minidriver vhidmini2. Vous pouvez compiler cet exemple de pilote à l’aide de KMDF ou d’UMDF 2.x.

Éléments à fournir

  1. Vous allez écrire un pilote de filtre inférieur sous MsHidUmdf.sys (pour UMDF) ou MsHidKmdf.sys (pour KMDF), tous deux inclus dans le système d’exploitation.

  2. Téléchargez et passez en revue l’exemple vhidmini2.

  3. Appelez WdfFdoInitSetFilter à partir de la fonction de rappel EvtDriverDeviceAdd du pilote.

  4. Créez des files d’attente d’E/S pour recevoir les demandes d’E /S quiMsHidUmdf.sysou MsHidKmdf.sys passées du pilote de classe à votre pilote.

  5. Fournissez une fonction de rappel EvtIoDeviceControl qui se branche vers des gestionnaires de méthodes spécifiques à IOCTL. Passez en revue les IOCTL décrites dans WDF HID Minidriver IOCTLs et assurez-vous que votre pilote gère celles appropriées pour votre appareil.

  6. Pour UMDF, si votre pilote est énuméré par ACPI, activez éventuellement la suspension sélective. Dans la clé matérielle de l’appareil, ajoutez une sous-clé EnableDefaultIdleNotificationHandler et définissez-la sur 1.

  7. Pour UMDF, définissez les directives INF suivantes dans une section DDInstall spécifique à WDF de votre fichier INF :

    • UmdfKernelModeClientPolicy vers AllowKernelModeClients afin que le pilote pass-through en mode noyau puisse être chargé dans la pile.
    • UmdfMethodNeitherAction à Copier pour permettre à UMDF de traiter les IOCTL de METHOD_NEITHER type.
    • UmdfFileObjectPolicy vers AllowNullAndUnknownFileObjects
    • UmdfFsContextUsePolicy vers CanUseFsContext2

    Par exemple :

    [hidumdf.NT.Wdf]
    UmdfKernelModeClientPolicy = AllowKernelModeClients
    UmdfMethodNeitherAction=Copy
    UmdfFileObjectPolicy=AllowNullAndUnknownFileObjects
    UmdfFsContextUsePolicy = CanUseFsContext2
    

Si vous écrivez un minidriver HID UMDF pour Windows 7, téléchargez le Kit de pilotes Windows (WDK) 8.1 pour obtenir le code source pour HidUmdf.sys. Ensuite, écrivez un pilote UMDF 1.11 et incluez HidUmdf.sys et UMDF 1.11 dans votre package de pilotes.

Architecture

Le pilote de classe HID (HidClass.sys) et l’infrastructure fournissent des routines de répartition WDM en conflit pour gérer certaines demandes d’E/S (telles que les demandes de Plug-and-Play et de gestion de l’alimentation) pour les minidrivers. Par conséquent, un minidriver HID ne peut pas être lié au pilote de classe et au framework. Par conséquent, Microsoft fournit MsHidUmdf.sys et MsHidKmdf.sys, qui sont des pilotes WDM qui résident entre le pilote de classe et le minidriver.

Les deuxMsHidUmdf.sys et MsHidKmdf.sys appeler la routine HidRegisterMinidriver du pilote de classe HID pour s’inscrire en tant que minidriver HID réel. Bien que ces pilotes agissent en tant que pilote de fonction de l’appareil, ils passent simplement les demandes d’E/S du pilote de classe à votre pilote (et sont donc parfois appelés pilotes pass-through). Pour KMDF et UMDF, le seul composant que vous fournissez est le minidriver HID, qui est un pilote de filtre inférieur qui se trouve sous le pilote pass-through.

Architecture UMDF : architecture KMDF

Diagramme montrant l’emplacement des hidumdf.sys dans la pile de pilotes.

Diagramme montrant l’emplacement des mshidkmdf.sys dans la pile des pilotes.