分派 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,以判斷分派層級旗標的值。 測試會破壞旗標的目的。 如有必要,呼叫的函式只要執行測試本身即可。 驅動程式如何判斷它應該或不應該將旗標設定為特定驅動程式的設計。