還原序列化的 NDIS 迷你埠驅動程式
所有 NDIS 6.0 和更新版本的驅動程式都會 還原序列化。
還原序列化的 NDIS 迷你埠驅動程式會將自己的MiniportXxx函式作業序列化,並在內部排入所有傳送要求,而不是依賴 NDIS 來執行這些函式。 因此,還原序列化的迷你埠驅動程式可以達到比序列化迷你埠驅動程式更好的全雙工效能。
還原序列化驅動程式模型是 NDIS 迷你埠驅動程式的預設模型。 連線導向的迷你埠驅動程式以及具有 WDM 下邊緣的迷你埠驅動程式,必須還原序列化驅動程式。 撰寫新的 NDIS 迷你埠驅動程式時,您應該撰寫已還原序列化的驅動程式。 可能的話,您也應該將較舊的驅動程式移植到 NDIS 6.0 或更新版本。 如需移植驅動程式的詳細資訊,請參閱:
還原序列化的迷你埠驅動程式在與 NDIS 介面時必須符合下列需求:
還原序列化的迷你埠驅動程式必須在初始化期間識別自己,例如 NDIS。
還原序列化的迷你埠驅動程式必須以非同步方式完成所有傳送要求。 若要完成傳送要求,無連線 NDIS 6.0 和更新版本的迷你埠驅動程式會呼叫 NdisMSendNetBufferListsComplete 函式 。 連接導向的 NDIS 6.0 和更新版本的迷你埠驅動程式會呼叫 NdisMCoSendNetBufferListsComplete 函式 。
支援 NDIS 6.0 或更新版本的還原序列化迷你埠驅動程式會設定其傳遞給NdisMSendNetBufferListsComplete之NET_BUFFER_LIST結構的Status成員。
如果還原序列化的迷你埠驅動程式無法立即完成傳送要求,它就無法將要求傳回給 NDIS 以進行重新佇列。 相反地,迷你埠驅動程式必須在內部排入傳送要求佇列,直到有足夠的資源可供傳輸資料為止。
還原序列化的迷你埠驅動程式不得檢查傳遞至 NDIS 的結構,直到 NDIS 傳回它們為止。 NDIS 會將NET_BUFFER_LIST結構傳回至迷你埠驅動程式的 MiniportReturnNetBufferLists 函式 。
還原序列化的迷你埠驅動程式必須符合下列驅動程式內部需求:
還原序列化的迷你埠驅動程式必須使用 微調鎖定來保護其網路緩衝區佇列。 還原序列化的迷你埠驅動程式也必須保護其共用狀態,使其無法由自己的 MiniportXxx 函式同時存取。
還原序列化的迷你 埠驅動程式 MiniportXxx 函式可以在 IRQL < = DISPATCH_LEVEL執行。 因此,驅動程式寫入器無法假設 MiniportXxx 函式會在處理要求的序列中呼叫。 一個 MiniportXxx 函式可以先占另一個在較低 IRQL 執行的 MiniportXxx 函式。
還原序列化的迷你埠驅動程式負責網路緩衝區佇列管理。 當迷你埠驅動程式遇到資源問題時,無法將要求傳回給 NDIS 以進行重新佇列。 相反地,迷你埠驅動程式必須在內部排入所有傳送要求佇列,直到有足夠的資源可供傳送資料為止。
還原序列化的迷你埠驅動程式應該會在通訊協定決定的順序中完成傳送要求。
如需 NDIS 驅動程式傳送和接收需求的詳細資訊,請參閱 傳送和接收作業。
請注意,還原序列化的迷你埠驅動程式通常會以通訊協定決定的順序完成傳送要求。 不過,支援封包優先順序的迷你埠驅動程式 (例如 IEEE 802.1p) 可以根據優先順序資訊重新排序傳送要求。