Creación de objetos de solicitud de marco

Los objetos de solicitud de marco representan solicitudes de E/S que el administrador de E/S ha enviado a un controlador. Los controladores basados en marcos procesan cada solicitud de E/S mediante una llamada a métodos de objeto de solicitud de marco.

Cada solicitud de E/S contiene un paquete de solicitud de E/S de WDM (estructura IRP ), pero normalmente no es necesario acceder a la estructura irP.

La mayoría de los objetos de solicitud de marco se crean mediante el marco de trabajo, pero el controlador también puede crear objetos de solicitud.

Solicitar objetos creados por el marco

Cuando un controlador basado en marco recibe un paquete de solicitud de E/S (IRP) del administrador de E/S, el marco intercepta el IRP y crea un objeto de solicitud de marco. El marco coloca el objeto de solicitud en una cola de E/S y, si el controlador tiene controladores de solicitudes registrados para la cola, llama al controlador adecuado.

En el diagrama siguiente se muestran los pasos que se producen cuando el marco crea un objeto de solicitud para una operación de lectura.

Diagrama que ilustra los pasos para crear un objeto de solicitud para una operación de lectura en un controlador basado en marco.

Los pasos siguientes corresponden a los números del diagrama anterior:

  1. Una aplicación en modo de usuario lee un archivo mediante una llamada a la función ReadFile de Microsoft Win32.

  2. La función ReadFile llama al administrador de E/S, que se ejecuta en modo kernel.

  3. El administrador de E/S asigna una estructura IRP y almacena un código de función de IRP_MJ_READ en la estructura.

  4. El administrador de E/S llama a la rutina del controlador estándar DispatchRead para el controlador x, pasando un puntero a la estructura IRP. Dado que el controlador x es un controlador basado en el marco, el marco proporciona la rutina DispatchRead del controlador.

  5. El marco crea un objeto de solicitud que representa la estructura IRP. El marco agrega el objeto de solicitud a uno de los objetos de cola del controlador.

  6. El marco llama al controlador de solicitudes EvtIoRead del controlador, pasando un identificador de objeto de cola y un identificador de objeto de solicitud.

Solicitar objetos creados por un controlador

Los controladores basados en marcos también pueden crear objetos de solicitud. Por ejemplo, un controlador podría crear objetos de solicitud si recibe una solicitud de lectura o escritura para una cantidad de datos mayor que los destinos de E/S del controlador pueden controlar al mismo tiempo. En tal situación, el controlador puede dividir los datos en varias solicitudes más pequeñas y usar objetos de solicitud adicionales para enviar estas solicitudes más pequeñas a uno o varios destinos de E/S.

Para crear un objeto de solicitud, el controlador debe llamar a WdfRequestCreate seguido de métodos de objeto de marco que inicializan la solicitud, como WdfUsbTargetPipeFormatRequestForRead.

Si un controlador recibe IRP de WDM en una rutina de distribución de WDM y, a continuación, los servicios o los reenvía mediante el marco, el controlador puede llamar a WdfRequestCreateFromIrp.