Controladores de solicitudes
Si el controlador ha especificado el método de envío secuencial o paralelo para una cola de E/S, el marco llama a una función de devolución de llamada proporcionada por el controlador cada vez que está lista para entregar una de las solicitudes de la cola al controlador.
Para cada cola de E/S, el controlador puede proporcionar una o varias de las siguientes funciones de devolución de llamada, que se denominan controladores de solicitudes:
EvtIoRead
El marco llama a la función de devolución de llamada EvtIoRead de una cola de E/S cuando una solicitud de lectura está disponible en la cola.
EvtIoWrite
El marco llama a la función de devolución de llamada EvtIoWrite de una cola de E/S cuando una solicitud de escritura está disponible en la cola.
EvtIoDeviceControl
El marco llama a la función de devolución de llamada EvtIoDeviceControl de una cola de E/S de una cola de E/S cuando una solicitud de control de E/S de dispositivo está disponible en la cola.
EvtIoInternalDeviceControl
El marco llama a la función de devolución de llamada EvtIoInternalDeviceControl de una cola de E/S de una cola de E/S cuando hay una solicitud de control de E/S de dispositivo interna disponible en la cola.
EvtIoDefault
El marco llama a la función de devolución de llamada EvtIoDefault de una cola de E/S cuando hay alguna solicitud disponible, si el controlador no ha proporcionado la función de devolución de llamada específica del tipo de solicitud asociada.
El controlador registra funciones de devolución de llamada cuando llama a WdfIoQueueCreate para crear una cola de E/S para un dispositivo.
Cada una de estas funciones de devolución de llamada recibe dos argumentos de entrada: un identificador de la solicitud de E/S que el marco entrega al controlador y un identificador a la cola de E/S que ha mantenido la solicitud. Una función de devolución de llamada puede determinar el dispositivo de destino llamando a WdfIoQueueGetDevice.
El marco llama a los controladores de solicitudes del controlador en un contexto de subproceso arbitrario. Un controlador no debe esperar un período de tiempo prolongado mientras se ejecuta en un contexto de subproceso arbitrario. En algunos casos, el controlador puede usar objetos de distribuidor de kernel como mecanismos de sincronización. Para obtener información sobre cuándo el controlador puede esperar objetos de distribuidor y qué hacer cuando no puede hacerlo, vea Introducción a los objetos de distribuidor de kernel.