Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
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