Диспетчеризация отслеживания IRQL

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

Существуют и другие флаги, управляющие другими атрибутами, но имена флагов уровня диспетчеризации:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

NDIS_RETURN_FLAGS_DISPATCH_LEVEL

NDIS_RWL_AT_DISPATCH_LEVEL

Вызывающий объект должен определить параметр флага уровня диспетчеризации из известного текущего IRQL, а не путем тестирования IRQL. Например, вы знаете IRQL, так как это фиксированная характеристика структуры драйвера или драйвер сохранил текущий IRQL.

Если известный текущий IRQL DISPATCH_LEVEL, вызывающий объект должен установить этот флаг. Если текущий irQL неизвестен или вызывающий объект не работает на DISPATCH_LEVEL, вызывающий объект должен снять этот флаг. Если вызывающим является NDIS, вызываемая функция должна проверить этот флаг, чтобы избежать изменения IRQL.

Драйверы не должны тестировать irQL, чтобы определить значение для флага уровня диспетчеризации. Тестирование повысят цель флага. При необходимости вызываемая функция может просто выполнить само тестирование. Как драйвер определяет, что он должен или не должен устанавливать флаг, остается в структуре конкретного драйвера.