Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describen las extensiones basadas en clases al Kernel-Mode Driver Framework (KMDF).
Nota:
Antes de leer este tema, debe comprender las ideas presentadas en Minidrivers y pares de controladores y KMDF como modelo de par de controladores genéricos.
Para algunas clases de dispositivo, Microsoft proporciona extensiones kmDF que reducen aún más la cantidad de procesamiento que deben realizar los controladores kmDF. Un controlador que usa una extensión KMDF basada en clases tiene estas tres piezas y se denomina triple controlador:
- El framework, que gestiona las tareas comunes a la mayoría de los controladores.
- Extensión de marco basada en clases, que controla las tareas específicas de una clase determinada de dispositivos.
- Controlador KMDF, que controla las tareas específicas de un dispositivo determinado.
Los tres controladores de un controlador triple (controlador KMDF, extensión KMDF de clase de dispositivo, Framework) se combinan para formar un único controlador WDM.
Un ejemplo de una extensión KMDF de clase de dispositivo es SpbCx.sys, que es la extensión KMDF para la clase de dispositivo Simple Peripheral Bus (SPB). La clase SPB incluye buses serie sincrónicos como I2C y SPI. Un controlador triple para un controlador de bus I2C tendría este aspecto:
- El Framework maneja las tareas generales que son comunes a la mayoría de los controladores.
- SpbCx.sys controla las tareas específicas de la clase de bus SPB. Estas son tareas que son comunes a todos los buses SPB.
- El controlador KMDF controla las tareas específicas de un bus I2C. Llamemos a este controlador MyI2CBusDriver.sys.
Los tres controladores del controlador triple (MyI2CBusDriver.sys, SpbCx.sys, Wdf01000.sys) se combinan para formar un único controlador WDM que actúa como controlador de función para el controlador de bus I2C. Wdf01000.sys (framework) posee la tabla de distribución de este controlador, por lo que cuando alguien envía un IRP al controlador triple, va al wdf01000.sys. Si el wdf01000.sys puede controlar el IRP por sí mismo, SpbCx.sys y MyI2CBusDriver.sys no están implicados. Si wdf01000.sys no puede manejar el IRP por sí mismo, recibe ayuda llamando a un controlador de eventos en SbpCx.sys.
Estos son algunos ejemplos de controladores de eventos que pueden implementarse mediante MyI2CBusDriver.sys:
- EvtSpbControllerLock
- EvtSpbIoRead
- EvtSpbIoSequence
Estos son algunos ejemplos de controladores de eventos implementados por SpbCx.sys
- EvtIoRead