Extensions KMDF et triplets de pilotes

Cet article traite des extensions basées sur des classes dans l’infrastructure de pilotesKernel-Mode (KMDF).

Pour certaines classes d’appareils, Microsoft fournit des extensions KMDF qui réduisent davantage la quantité de traitement qui doit être effectuée par les pilotes KMDF. Un pilote qui utilise une extension KMDF basée sur une classe a ces trois éléments et il est appelé triple pilote :

  • Framework, qui gère les tâches communes à la plupart des pilotes.
  • Extension d’infrastructure basée sur la classe, qui gère les tâches spécifiques à une classe particulière d’appareils
  • Le pilote KMDF, qui gère les tâches spécifiques à un appareil particulier.

Les trois pilotes d'un ensemble de pilotes triple (pilote KMDF, extension de classe de périphérique KMDF, cadre) se combinent pour former un seul pilote WDM.

Un exemple d’extension KMDF pour la classe de périphérique est SpbCx.sys, qui est l’extension KMDF pour la classe de périphérique Simple Peripheral Bus (SPB). La classe SPB comprend des bus série synchrones tels que I2C et SPI. Un pilote triple pour un contrôleur de bus I2C ressemble à ceci :

  • Le Framework gère les tâches générales qui sont communes à presque tous les pilotes.
  • SpbCx.sys gère les tâches spécifiques à la classe de bus SPB. Il s’agit de tâches communes à tous les bus SPB.
  • Le pilote KMDF gère les tâches spécifiques à un bus I2C. Appelons ce pilote MyI2CBusDriver.sys.

extension triple du pilote kmdf.

Les trois pilotes du pilote triple (MyI2CBusDriver.sys, SpbCx.sys, Wdf01000.sys) se combinent pour former un seul pilote WDM qui sert de pilote de fonction pour le contrôleur de bus I2C. Wdf01000.sys (l’infrastructure) possède la table de répartition pour ce pilote. Par conséquent, lorsqu’une personne envoie un IRP au pilote triple, elle accède à la wdf01000.sys. Si le wdf01000.sys peut gérer lui-même l’IRP, SpbCx.sys et MyI2CBusDriver.sys ne sont pas impliqués. Si wdf01000.sys ne peut pas gérer l’IRP par lui-même, il obtient de l’aide en appelant un gestionnaire d’événements dans SbpCx.sys.

Voici quelques exemples de gestionnaires d’événements qui peuvent être implémentés par MyI2CBusDriver.sys:

  • EvtSpbControllerLock
  • EvtSpbIoRead
  • EvtSpbIoSequence

Voici quelques exemples de gestionnaires d’événements implémentés par SpbCx.sys

  • EvtIoRead