Compartilhar via


IRQLs em drivers de rede

Cada função de driver chamada pelo NDIS é executada em um IRQL determinado pelo sistema, que pode ser um dos níveis: PASSIVE_LEVEL <, DISPATCH_LEVEL < ou DIRQL. Por exemplo, a função de inicialização, a função de interrupção, a função de redefinição e a função de desligamento de um driver de miniporto geralmente são executadas em PASSIVE_LEVEL, embora as funções de redefinição e desligamento possam ser invocadas em um IRQL mais alto se o sistema exigir isso. O código de interrupção é executado no DIRQL, portanto, um driver intermediário ou de protocolo do NDIS nunca é executado no DIRQL. Todas as outras funções de driver NDIS são executadas em ou em nível inferior a IRQL = DISPATCH_LEVEL.

O IRQL no qual uma função de driver é executada afeta quais funções de NDIS ela pode chamar. Determinadas funções só podem ser chamadas em IRQL = PASSIVE_LEVEL. Outros podem ser chamados em DISPATCH_LEVEL ou inferior. Você deve verificar todas as funções do NDIS para verificar restrições de IRQL.

Qualquer função de driver que compartilhe recursos com a ISR (rotina de serviço de interrupção) do driver deve elevar seu IRQL para DIRQL para evitar situações de corrida. O NDIS fornece esse mecanismo.