Paquetes de solicitud de E/S

La mayoría de las solicitudes que se envían a los controladores de dispositivos se empaquetan en paquetes de solicitud de E/S (IRP). Un componente del sistema operativo o un controlador envía un IRP a un controlador mediante una llamada a IoCallDriver, que tiene dos parámetros: un puntero a un DEVICE_OBJECT y un puntero a un IRP. El DEVICE_OBJECT tiene un puntero a un DRIVER_OBJECT asociado. Cuando un componente llama a IoCallDriver, decimos que el componente envía el IRP al objeto de dispositivo o envía el IRP al controlador asociado al objeto de dispositivo. A veces, usamos la frase que pasa el IRP o reenvía el IRP en lugar de enviar el IRP.

Normalmente, un IRP se procesa mediante varios controladores que se organizan en una pila. Cada controlador de la pila está asociado a un objeto de dispositivo. Para más información, consulte Nodos de dispositivo y pilas de dispositivos. Cuando una pila de dispositivos procesa un IRP , el IRP normalmente se envía primero al objeto de dispositivo superior de la pila de dispositivos. Por ejemplo, si la pila de dispositivos que se muestra en este diagrama procesa un IRP , el IRP se enviará primero al objeto de dispositivo de filtro (Filter DO) en la parte superior de la pila de dispositivos.

diagrama de un nodo de dispositivo y su pila de dispositivos.

Pasar un IRP hacia abajo en la pila de dispositivos

Supongamos que el administrador de E/S envía un IRP al do de filtro en el diagrama. El controlador asociado a Filter DO, AfterThought.sys, procesa el IRP y, a continuación, lo pasa al objeto de dispositivo funcional (FDO), que es el siguiente objeto de dispositivo inferior de la pila de dispositivos. Cuando un controlador pasa un IRP al siguiente objeto de dispositivo inferior de la pila de dispositivos, decimos que el controlador pasa el IRP a la pila de dispositivos.

Algunos IRP se pasan hasta la pila de dispositivos al objeto de dispositivo físico (PDO). Otros IRP nunca llegan al PDO porque son completados por uno de los controladores por encima del PDO.

Los IRP son independientes

La estructura IRP está autocontenida en el sentido de que contiene toda la información que un controlador necesita para controlar una solicitud de E/S. Algunas partes de la estructura IRP contienen información que es común a todos los controladores participantes de la pila. Otras partes de la información de retención de IRP específica de un controlador determinado de la pila.