Estensioni KMDF e triplette del driver

Questo articolo illustra le estensioni basati su classi per il Kernel-Mode Driver Framework (KMDF) .

Nota

Prima di leggere questo argomento, è necessario comprendere le idee presentate in Minidriver e coppie di driver e KMDF come Modello di Coppia di Driver Generico.

Per alcune classi di dispositivi, Microsoft fornisce estensioni KMDF che riducono ulteriormente la quantità di elaborazione che deve essere eseguita dai driver KMDF. Un driver che utilizza un'estensione KMDF basata su classi è composto da tre elementi ed è chiamato "triple driver ".

  • Framework, che gestisce le attività comuni alla maggior parte dei driver.
  • Estensione del framework basata su classi, che gestisce le attività specifiche di una determinata classe di dispositivi
  • Driver KMDF, che gestisce le attività specifiche di un particolare dispositivo.

I tre driver in un driver triplo (driver KMDF, estensione KMDF di classe dispositivo, Framework) si combinano per formare un singolo driver WDM.

Un esempio di estensione KMDF di classe dispositivo è SpbCx.sys, che è l'estensione KMDF per la classe di dispositivo Simple Peripheral Bus (SPB). La classe SPB include bus seriali sincroni, ad esempio I2C e SPI. Un driver triplo per un controller bus I2C sarà simile al seguente:

  • Il framework gestisce le attività generali comuni alla maggior parte dei driver.
  • SpbCx.sys gestisce le attività specifiche della classe del bus SPB. Si tratta di attività comuni a tutti i bus SPB.
  • Il driver KMDF gestisce le attività specifiche di un bus I2C. Chiamiamo questo driver MyI2CBusDriver.sys.

tripla estensione del driver kmdf.

I tre driver nel driver triple (MyI2CBusDriver.sys, SpbCx.sys, Wdf01000.sys) si combinano per formare un singolo driver WDM che funge da driver di funzione per il controller del bus I2C. Wdf01000.sys (Framework) possiede la tabella di dispatch per questo driver, quindi quando un utente invia un IRP al driver triplo, questo viene indirizzato a wdf01000.sys. Se il wdf01000.sys può gestire l'IRP da solo, SpbCx.sys e MyI2CBusDriver.sys non sono coinvolti. Se wdf01000.sys non è in grado di gestire l'IRP da solo, ottiene assistenza chiamando un gestore eventi in SbpCx.sys.

Ecco alcuni esempi di gestori eventi che possono essere implementati da MyI2CBusDriver.sys:

  • EvtSpbControllerLock
  • EvtSpbIoRead
  • EvtSpbIoSequence

Ecco alcuni esempi di gestori eventi implementati da SpbCx.sys

  • EvtIoRead