重新組NET_BUFFER_LIST結構
NDIS 驅動程式可以從現有的NET_BUFFER_LIST結構建立重新組合 NET_BUFFER_LIST 結構。 重新組合的結構會參考來自多個來源 NET_BUFFER 結構的原始資料。 驅動程式可以使用這種類型的結構,有效率地將許多較小的緩衝區合併成單一大型緩衝區。
下圖顯示父NET_BUFFER_LIST結構與重新組合子結構之間的關聯性:
上圖包含父 NET_BUFFER_LIST 結構和衍生自該父系的子結構。 父結構有一個 NET_BUFFER_LIST_CONTEXT 結構,以及附加 MDL 的三 個NET_BUFFER 結構。 父結構的父指標是 Null ,表示它不是衍生結構。
子NET_BUFFER_LIST結構有一個附加 MDL 的NET_BUFFER結構。 子NET_BUFFER_LIST結構具有父結構的指標。 Null,其中NET_BUFFER_LIST_CONTEXT結構指標會指出子系沒有NET_BUFFER_LIST_CONTEXT結構。
NDIS 驅動程式會呼叫 NdisAllocateReassembledNetBufferList 函式來重新組合片段 NET_BUFFER_LIST 結構。 NDIS 會配置新的 NET_BUFFER 結構和 MDL,並重新組合NET_BUFFER_LIST結構。 NDIS 不會為重新組譯結構配置NET_BUFFER_LIST_CONTEXT結構。 重新組譯NET_BUFFER結構和 MDL 會描述與父結構相同的資料。 不會複製資料。
若要建立重新組譯NET_BUFFER_LIST結構, NdisAllocateReassembledNetBufferList 會略過每個父NET_BUFFER結構之 StartOffset 參數中指定的位元組數目。 NdisAllocateReassembledNetBufferList 會將每個父系NET_BUFFER結構中的其餘資料串連至一個重新組譯NET_BUFFER結構的 MDL 鏈結。 NdisAllocateReassembledNetBufferList 會 (藉由 DataOffsetDelta 中指定的數量,在重新組譯NET_BUFFER結構) 增加已使用的資料空間。
NDIS 驅動程式會呼叫 NdisFreeReassembledNetBufferList 函式,以釋放重新組譯 NET_BUFFER_LIST 結構和相關聯的 NET_BUFFER 結構和 MDL 鏈結。