Conceptos de WDM para controladores WDF
Windows Driver Frameworks (WDF) es un contenedor alrededor de las interfaces de Microsoft Windows Driver Model (WDM). Aunque el marco simplifica muchos conceptos de WDM y oculta a otros completamente para que no tenga que trabajar con ellos, todavía debe comprender algunos de los conceptos básicos de los controladores WDM. En concreto, debe comprender los tipos de controladores, las pilas de controladores, las pilas de dispositivos y los paquetes de solicitud de E/S.
Tipos de controladores
Los controladores basados en Windows se dividen en tres tipos: controladores de bus, controladores de funciones y controladores de filtro. Los conductores de autobús admiten buses de E/S mediante la detección de dispositivos secundarios que están conectados a un bus primario e informando de sus características. (Esta actividad se denomina enumeración de bus). Los controladores de funciones controlan las operaciones de E/S para dispositivos y autobuses. Los controladores de filtro reciben, revisan y posiblemente modifican los datos que fluyen entre las aplicaciones de usuario y los controladores, o entre controladores individuales.
Los controladores de los autobuses son básicamente controladores de función que también enumeran los elementos secundarios. Un controlador actúa como un "controlador de autobús" cuando enumera los dispositivos secundarios en un bus. De lo contrario, el mismo controlador actúa como el "controlador de función" del bus cuando controla las operaciones de E/S que acceden al hardware del adaptador de bus.
Un controlador de User-Mode Driver Framework (UMDF) no puede ser un controlador de bus.
Pilas de controladores
En el sistema operativo Windows, los controladores WDM se superponen en una secuencia de llamadas verticales que se denomina pila de controladores. El controlador más alto de la pila normalmente recibe solicitudes de E/S de las aplicaciones de usuario, después de que las solicitudes hayan pasado por el administrador de E/S del sistema operativo. Las capas de controlador inferiores normalmente se comunican con el hardware del equipo.
Una pila de controladores simple incluye un controlador de bus en la parte inferior de la pila, que controla las operaciones de E/S específicas del bus y enumera los dispositivos secundarios que están conectados a él. Normalmente, uno o varios controladores de función específicos del dispositivo están por encima del controlador de bus. Estos controladores de función controlan las operaciones de E/S en los dispositivos conectados al bus. Los controladores de filtro pueden estar por encima de los controladores de función o pueden residir entre un controlador de bus y un controlador de función. Un sistema en ejecución tiene varias pilas de controladores que admiten diferentes tipos de dispositivos.
Pilas de dispositivos
Cada pila de controladores admite una o varias pilas de dispositivos. Una pila de dispositivos es un conjunto de objetos de dispositivo creados a partir de estructuras de DEVICE_OBJECT definidas por WDM. Cada pila de dispositivos representa un dispositivo. Cada controlador crea un objeto de dispositivo para cada uno de sus dispositivos y conecta cada objeto de dispositivo a una pila de dispositivos. Las pilas de dispositivos se crean y quitan a medida que los dispositivos están conectados y desconectados, y cada vez que se reinicia el sistema.
Cuando un controlador de bus detecta que los dispositivos secundarios se han conectado o desconectado, informa al administrador de Plug and Play (PnP). En respuesta, el administrador de PnP pide al controlador de bus que cree un objeto de dispositivo físico (PDO) para cada dispositivo secundario que esté conectado al dispositivo primario (es decir, el bus). El PDO se convierte en la parte inferior de una pila de dispositivos.
A continuación, el administrador de PnP carga controladores de función y filtro para admitir cada dispositivo (si aún no están cargados) y, a continuación, el administrador de PnP llama a estos controladores para que cada uno pueda crear un objeto de dispositivo y agregarlo a la parte superior de la pila de dispositivos. Los controladores de función crean objetos de dispositivo funcionales (FDO) y los controladores de filtro crean objetos de dispositivo de filtro (DO de filtro).
Cuando el administrador de E/S envía una solicitud de E/S a los controladores de un dispositivo, pasa la solicitud al controlador que creó el objeto de dispositivo más alto en la pila de dispositivos. Si ese controlador pide al administrador de E/S que pase la solicitud al controlador inferior siguiente, el administrador de E/S usa la pila de dispositivos para determinar el siguiente controlador inferior. (El controlador siguiente inferior es el controlador que creó el siguiente objeto de dispositivo inferior).
WDF crea un objeto de dispositivo de marco para cada objeto de dispositivo WDM. Los controladores basados en marcos acceden a estos objetos de dispositivo de marco en lugar de a los objetos de dispositivo WDM.
Paquetes de solicitud de E/S
El administrador de E/S envía las solicitudes de E/S de una aplicación a los controladores mediante la creación de paquetes de solicitud de E/S (IRP). Un IRP puede contener una solicitud para realizar una operación de E/S (por ejemplo, una operación de lectura y escritura) o una solicitud para realizar una acción de control de E/S (IOCTL) (por ejemplo, devolver el estado). Además, el administrador de PnP crea IRP que representan las operaciones de administración de energía y PnP que los controladores deben realizar y envía estos IRP a los controladores.
Normalmente, el administrador de E/S crea un IRP de lectura o escritura cuando una aplicación de usuario solicita una operación de lectura o escritura. El administrador de E/S pasa el IRP al controlador en la parte superior de la pila de controladores y ese controlador atiende la solicitud o pasa la solicitud al siguiente controlador inferior. Algunas solicitudes viajan a la parte inferior de la pila y algunas se procesan completamente mediante controladores de nivel superior.
Cada vez que un controlador recibe un IRP, el controlador también recibe un puntero al objeto de dispositivo que representa el dispositivo que debe controlar la operación. Por lo tanto, los controladores de una pila de controladores usan objetos de dispositivo para determinar a qué dispositivos conectados se supone que va una solicitud determinada.
Normalmente, los controladores WDF no acceden directamente a los IRP. El marco convierte los IRP de WDM que representan operaciones de control de E/S de lectura, escritura y dispositivo en objetos de solicitud de marco que Kernel-Mode Driver Framework (KMDF) y los controladores UMDF reciben en colas de E/S. El marco controla los IRP de PnP y de administración de energía internamente y usa funciones de devolución de llamada de eventos para informar al controlador de los eventos de alimentación y PnP.