调度 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 测试来确定调度级标志的值。 测试会破坏国旗的目的。 如有必要,调用的函数可以自行进行测试。 在确定是否应该设置标志时,驱动程序的确定方式取决于该特定驱动程序的设计。