Paquetes de solicitud de E/S
La mayoría de las solicitudes que se envían a controladores de dispositivo 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 llamando a IoCallDriver, que tiene dos parámetros: un puntero a un DEVICE_OBJECT y un puntero a un IRP. 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 pasa el IRP o reenvía el IRP en lugar de envía 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 obtener 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 (DO de filtro) en la parte superior de la pila de dispositivos.
Transferencia de 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 al DO de filtro, 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 hacia abajo a la pila de dispositivos.
Algunos IRP se pasan hacia el final de la pila de dispositivos hasta el objeto de dispositivo físico (PDO). Otros IRP nunca llegan al PDO porque son completados por uno de los controladores situados encima del PDO.
Los IRP son independientes
La estructura de IRP es independiente 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 del IRP contienen información que es común a todos los controladores participantes de la pila. Otras partes de la información incluida en el IRP es específica de un controlador determinado de la pila.