Controlar transferencias de forma asincrónica
Excepto para los controladores de nivel superior, todos los controladores controlan IRP_MJ_READ y IRP_MJ_WRITE solicitudes de forma asincrónica. Las rutinas DispatchRead y DispatchWrite de incluso un controlador de nivel superior no pueden esperar a que los controladores de nivel inferior terminen de procesar una solicitud asincrónica de lectura o escritura; deben pasar dicha solicitud a controladores inferiores y devolver STATUS_PENDING.
Del mismo modo, la rutina DispatchReadWrite de un controlador de dispositivo de nivel inferior debe pasar la solicitud de transferencia a otras rutinas de controlador que procesan las solicitudes de E/S del dispositivo y, a continuación, devuelven STATUS_PENDING.
A veces, un controlador de nivel superior debe configurar IRP de transferencia parcial y pasarlos a controladores inferiores. El controlador de nivel superior puede completar el IRP de lectura y escritura original solo cuando los controladores inferiores han completado sus solicitudes de transferencia parcial.
Por ejemplo, se requiere una rutina DispatchReadWrite del controlador de clase SCSI para dividir solicitudes de transferencia de gran tamaño que superen las capacidades de transferencia del HBA subyacente en un conjunto de solicitudes de transferencia parcial. El controlador de clase debe configurar los parámetros en sus IRP de transferencia parcial para que los controladores de puerto o miniporte SCSI puedan satisfacer cada solicitud de transferencia parcial en una sola operación DMA.
Otros controladores de dispositivos que usan DMA o PIO también pueden necesitar dividir las solicitudes de transferencia grandes para sí mismos.
Para obtener más información sobre el uso de DMA y PIO, consulte Técnicas de entrada y salida.