IRQLs em drivers de rede
Cada função de driver chamada pelo NDIS é executada em um IRQL determinado pelo sistema (um dos PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL). Por exemplo, a função de inicialização , a função de parada , a função de redefinição e o desligamento de um driver de miniporta normalmente são executados em PASSIVE_LEVEL, embora as funções de redefinição e desligamento possam ser invocadas em um IRQL mais alto se o sistema exigir. O código de interrupção é executado no DIRQL, portanto, um driver de protocolo ou intermediário NDIS nunca é executado no DIRQL. Todas as outras funções de driver NDIS são executadas em OU abaixo de IRQL = DISPATCH_LEVEL.
O IRQL no qual uma função de driver é executada afeta quais funções NDIS ele pode chamar. Determinadas funções só podem ser chamadas em IRQL = PASSIVE_LEVEL. Outros podem ser chamados em DISPATCH_LEVEL ou inferior. Você deve marcar cada função NDIS para restrições irql.
Qualquer função de driver que compartilhe recursos com a ISR (rotina de serviço de interrupção) do driver deve ser capaz de elevar seu IRQL para DIRQL para evitar condições de corrida. O NDIS fornece esse mecanismo.