Compartir a través de


IRQL en controladores de red

Cada función de controlador llamada por NDIS se ejecuta en un IRQL determinado por el sistema (uno de PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL). Por ejemplo, una función de inicialización del controlador miniporte, una función de detención , una función de restablecimiento y una función de apagado se ejecutan normalmente en PASSIVE_LEVEL, aunque las funciones de restablecimiento y apagado se pueden invocar en un IRQL superior si el sistema lo requiere. El código de interrupción se ejecuta en DIRQL, por lo que un controlador intermedio o de protocolo NDIS nunca se ejecuta en DIRQL. Todas las demás funciones del controlador NDIS se ejecutan en IRQL = DISPATCH_LEVEL.

IrQL en el que se ejecuta una función de controlador afecta a las funciones de NDIS a las que puede llamar. Solo se puede llamar a determinadas funciones en IRQL = PASSIVE_LEVEL. Se puede llamar a otros en DISPATCH_LEVEL o inferior. Debe comprobar cada función NDIS para ver las restricciones de IRQL.

Cualquier función de controlador que comparta recursos con la rutina de servicio de interrupción del controlador (ISR) debe poder elevar su IRQL a DIRQL para evitar condiciones de carrera. NDIS proporciona un mecanismo de este tipo.