Compartir a través de


colas de IRP de Driver-Managed

Excepto para los controladores del sistema de archivos, el administrador de E/S asocia un objeto de cola de dispositivos (para IRP de puesta en cola) con cada objeto de dispositivo que crea un controlador.

La mayoría de los controladores de dispositivos llaman a las rutinas de soporte técnico del administrador de E/S para usar la cola de dispositivos asociada, que contiene IRP cada vez que las solicitudes de E/S del dispositivo de destino llegan más rápido que el controlador puede procesarlas hasta su finalización. Con esta técnica, los IRP se ponen en cola en una rutina StartIo proporcionada por el controlador.

Para un buen rendimiento, la mayoría de los controladores intermedios simplemente pasan IRP a controladores inferiores tan rápido como entran, por lo que los controladores intermedios casi nunca usan las colas de dispositivos asociadas a sus respectivos objetos de dispositivo.

Sin embargo, puede diseñar un controlador para administrar colas internas de IRP configurando explícitamente una o varias colas de dispositivos, colas interbloqueadas o colas seguras para cancelar. Este enfoque puede ser especialmente útil si el controlador controla un dispositivo que se superpone a las operaciones de E/S. Para este tipo de dispositivo, puede ser difícil administrar el procesamiento simultáneo de dos o más IRP para el mismo objeto de dispositivo de destino con solo una sola cola.

La manera más sencilla de crear una cola interna es usar el marco de cola irP seguro de cancelación. Puede implementar el mecanismo de puesta en cola que prefiera en el controlador. Después, puede usar IoCsqInitialize para registrar un conjunto de rutinas de devolución de llamada que controlan la inserción y eliminación de IRP, así como bloquear y desbloquear la cola. El marco de cola irP seguro de cancelación proporciona las rutinas IoCsqInsertIrp, IoCsqRemoveIrp e IoCsqRemoveNextIrp que usan automáticamente las rutinas de devolución de llamada para insertar y quitar IRP de forma segura de la cola del controlador. El sistema también usa las rutinas de devolución de llamada para quitar de forma segura las IRP canceladas.

También puede optar por configurar colas complementarias para IRP en el controlador de un controlador de dispositivo para un conjunto de dispositivos físicos heterogéneos. Por ejemplo, el controlador de puerto SCSI usa objetos de cola de dispositivos para colas internas. Este controlador tiene una rutina StartIo y configura objetos de cola de dispositivos como colas complementarias, además de la cola de dispositivos asociada al objeto de dispositivo que crea para representar un HBA. El controlador de puerto SCSI usa sus colas de dispositivos complementarias para contener IRP enlazados a unidades lógicas concretas en el bus SCSI controlado por HBA.

El controlador del controlador de disquete del sistema es un ejemplo de un controlador que no tiene rutina StartIo y usa una cola interbloqueada. Este controlador configura una cola interbloqueada doblemente vinculada en la que y desde la que el controlador y su subproceso dedicado al dispositivo insertan y quitan IRP.

El kernel define el tipo de objeto de cola de dispositivos. El componente de soporte técnico ejecutivo proporciona rutinas para insertar y quitar IRP en colas interbloqueadas. Los controladores para Windows XP y versiones posteriores de Windows pueden usar colas IRP seguras para cancelar para controlar la puesta en cola de IRP.

En las secciones siguientes se explica cómo usar colas de dispositivos, colas interbloqueadas y colas seguras para cancelar:

Configuración y uso de colas de dispositivos

Administración de colas de dispositivos

Configuración y uso de colas interbloqueadas

Administración de colas interbloqueadas con un subproceso de Driver-Created

Colas IRP de cancelación segura