Rutinas de envío e IRQL
Se llama a la mayoría de las rutinas de distribución de los controladores en un contexto de subproceso arbitrario en IRQL = PASSIVE_LEVEL, con las siguientes excepciones:
Se llama a las rutinas de distribución de los controladores de nivel superior en el contexto del subproceso que originó la solicitud de E/S, que suele ser un subproceso de aplicación en modo de usuario.
En otras palabras, las rutinas de distribución de los controladores del sistema de archivos y otros controladores de nivel superior se llaman en un contexto de subproceso nobitrario en IRQL = PASSIVE_LEVEL.
Las rutinas DispatchRead, DispatchWrite y DispatchDeviceControl de los controladores de dispositivo de nivel más bajo y de controladores intermedios superpuestas por encima de ellos en la ruta de acceso de paginación del sistema, se pueden llamar en IRQL = APC_LEVEL y en un contexto de subproceso arbitrario.
Las rutinas DispatchRead o DispatchWrite , y cualquier otra rutina que también procese solicitudes de lectura o escritura en un dispositivo de nivel inferior o controlador intermedio, debe residir en todo momento. Estas rutinas de controlador no pueden ser paginables ni formar parte de la sección pageable-image de un controlador; no deben tener acceso a ninguna memoria paginable. Además, no deben depender de ninguna llamada de bloqueo (como KeWaitForSingleObject con un tiempo de espera distinto de cero).
Se puede llamar a la rutina DispatchPower de los controladores en las rutas de acceso de hibernación o paginación en IRQL = DISPATCH_LEVEL. Las rutinas dispatchPnP de estos controladores deben estar preparadas para controlar las solicitudes de IRP_MN_DEVICE_USAGE_NOTIFICATION de PnP.
Se puede llamar a la rutina DispatchPower de los controladores que requieren energía de entrada en el inicio en IRQL = DISPATCH_LEVEL.
Para obtener más información, consulte Administración de prioridades de hardware.