Partilhar via


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 de inicialização de um driver de miniporta, função de parada, função de redefinição de e função de de desligamento 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. O código de interrupção é executado no DIRQL, portanto, um driver intermediário ou de protocolo 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. Certas funções podem ser chamadas apenas em IRQL = PASSIVE_LEVEL. Outros podem ser chamados em DISPATCH_LEVEL ou inferior. Você deve verificar todas as funções NDIS em relação às restrições de IRQL.

Qualquer função do controlador que compartilhe recursos com a rotina de serviço de interrupção (ISR) do controlador deve ser capaz de elevar o seu IRQL para DIRQL para evitar condições de corrida. O NDIS prevê esse mecanismo.