Rutinas StartIo en controladores de Higher-Level
Cualquier controlador de nivel superior puede tener una rutina StartIo . Sin embargo, es poco probable que este controlador sea interoperable con los controladores de nivel inferior existentes y es probable que muestre características de rendimiento deficientes.
Una rutina StartIo en un controlador de nivel superior tiene los siguientes efectos:
Los IRP entrantes se pueden poner en cola mediante una llamada a IoStartPacket desde las rutinas DispatchXxx del controlador e IoStartNextPacket desde sus rutinas de IoCompletion , lo que hace que los IRP se procesen de uno en uno a uno a través de la rutina StartIo .
El rendimiento de E/S del controlador podría ser notablemente más lento durante períodos de mucha demanda de E/S, ya que su rutina StartIo puede convertirse en un cuello de botella.
La rutina StartIo del controlador llama a IoCallDriver con cada IRP en IRQL = DISPATCH_LEVEL, lo que provoca que todas las rutinas de envío de controladores de nivel inferior también se ejecuten en IRQL = DISPATCH_LEVEL. Esto restringe el conjunto de rutinas de soporte técnico que los controladores más bajos pueden llamar en sus rutinas de envío. Dado que la mayoría de los escritores de controladores asumen que las rutinas de distribución de los controladores se ejecutan en IRQL < DISPATCH_LEVEL, es poco probable que el controlador de nivel superior sea interoperable con muchos controladores de nivel inferior existentes.
La rutina StartIo reduce el rendimiento general del sistema porque y las rutinas de distribución de todos los controladores de nivel inferior de su cadena se ejecutan en IRQL = DISPATCH_LEVEL.
Para obtener más información sobre las IRQL en las que se ejecutan las rutinas de controlador estándar, consulte Administración de prioridades de hardware.
Ninguno de los controladores de nivel superior suministrados por el sistema tiene una rutina StartIo , ya que puede ralentizar el procesamiento irP para el propio controlador, para todos los controladores por encima y por debajo de él, y para el sistema general.
La mayoría de los controladores de nivel superior simplemente envían IRP a los controladores de nivel inferior desde sus rutinas de envío y realizan cualquier procesamiento de limpieza necesario en sus rutinas de IoCompletion .
Sin embargo, los controladores de nivel superior pueden configurar colas internas para IRP que solicitan determinados tipos de operaciones o configurar colas internas para contener IRP enlazadas a un conjunto de dispositivos subyacentes heterogéneos, como el controlador de puerto SCSI. Para obtener más información, consulte IrP de puesta en cola y puesta en cola.