调度 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。

如果DISPATCH_LEVEL已知的当前 IRQL,则调用方应设置此标志。 如果当前 IRQL 未知,或者调用方未在DISPATCH_LEVEL运行,则调用方应清除此标志。 如果调用方为 NDIS,则调用的函数应测试此标志,以避免更改 IRQL。

驱动程序不应测试 IRQL 以确定调度级别标志的值。 测试会破坏标志的目的。 如有必要,调用的 函数只需自行执行测试。 驱动程序如何确定它应该或不应该设置标志留给特定驱动程序的设计。