Поделиться через


Списки IRQL в сетевых драйверах

Каждая функция драйвера, вызываемая NDIS, выполняется в определяемой системой среде IRQL (одна из PASSIVE_LEVEL < DISPATCH_LEVEL < DIRQL). Например, функции инициализации драйвера минипорта, функции остановки , сброса и завершения работы обычно выполняются в PASSIVE_LEVEL, хотя функции сброса и завершения работы могут вызываться в более высоком irQL, если это требуется системе. Код прерывания выполняется в DIRQL, поэтому драйвер промежуточного уровня или протокола NDIS никогда не выполняется в DIRQL. Все остальные функции драйвера NDIS выполняются в или ниже IRQL = DISPATCH_LEVEL.

Значение IRQL, при котором выполняется функция драйвера, влияет на то, какие функции NDIS она может вызывать. Некоторые функции могут вызываться только в irQL = PASSIVE_LEVEL. Другие могут быть вызваны по DISPATCH_LEVEL или ниже. Для ограничений IRQL следует проверка каждую функцию NDIS.

Любая функция драйвера, которая совместно использует ресурсы с подпрограммой обслуживания прерываний (ISR) водителя, должна иметь возможность повысить свой IRQL до DIRQL, чтобы предотвратить состояние гонки. NDIS предоставляет такой механизм.