共用方式為


NET_BUFFER結構

NDIS 6.0 和更新版本 NET_BUFFER 結構類似於 NDIS 5 所使用的 NDIS_PACKET 結構。x 和舊版驅動程式。 每個NET_BUFFER結構都會封裝一組網路數據。

下圖顯示 NET_BUFFER 結構中的欄位。

圖表,其中顯示NET_BUFFER結構中的欄位。

NET_BUFFER 結構包含 NetBufferHeader 成員中的 NET_BUFFER_HEADER 結構。 NET_BUFFER_HEADER 結構包含 NetBufferData 成員中的 NET_BUFFER_DATA 結構。 您應該使用 NDIS 巨集來存取 NET_BUFFER 結構成員。 如需這些巨集的完整清單,請參閱 NET_BUFFER 結構參考頁面。

某些 NET_BUFFER 結構成員只能由 NDIS 使用。 驅動程式通常使用的成員如下:

協定保留
保留供通訊協定驅動程式使用。

MiniportReserved
保留供迷你埠驅動程式使用。

NdisPoolHandle
指定一個集區句柄,用於標識分配NET_BUFFER結構所用的NET_BUFFER集區。

下一個
指定指向 NET_BUFFER 結構鏈結串列中下一個 NET_BUFFER 結構的指標。 如果這是清單中的最後一個NET_BUFFER結構,則此成員會 NULL

DataLength
指定 MDL 鏈結中網路數據的位元組長度。

DataOffset
指定在 MDL 鏈結中,從記憶體開始位置到網路數據開始位置的位移,該位移以位元組為單位。

CurrentMdl
指定目前驅動程式所使用的第一個 MDL 指標。 此指標透過略過目前驅動程式未使用的任何 MDL,來提升效能。

CurrentMdlOffset
指定位移,以位元組為單位,指向由 NET_BUFFER 結構的 CurrentMdl 成員指定的 MDL 中已使用數據空間的開頭。

下圖顯示 CurrentMdlCurrentMdlOffsetDataOffsetDataLength 成員和數據空間之間的關聯性。

圖表,描述與 CurrentMdl、CurrentMdlOffset、DataOffset 和 DataLength 相關的數據空間配置。

NDIS 提供函式來管理 MDL 鏈結中的數據空間。 駕駛員使用數據空間的方式會隨著當前的駕駛員而動態改變。 有時候會有目前驅動程式尚未使用的數據空間。 雖然 未使用的數據空間 目前未使用,但它可以包含有效的數據。 例如,在接收路徑上,未使用的數據空間 可以包含較低層級驅動程式所使用的標頭資訊。

驅動程式會執行撤退和推進作業,以增加和減少 使用的數據空間。 如需撤退和進階作業的詳細資訊,請參閱 撤退和進階作業

下列詞彙和定義描述 NET_BUFFER 資料空間的元素:

已使用的資料空間
已使用的數據空間 包含目前驅動程式目前使用的數據。 驅動程式會透過撤退作業增加 已使用的數據空間,並透過進階作業減少 已使用的數據空間

未使用的數據空間
目前驅動程式目前未使用此資料空間。

數據大小總計
資料大小總計是已使用資料空間 大小的總和,未使用的數據空間。 若要計算總大小,請將 DataOffset 加到 DataLength

撤退
撤退作業會增加 已使用之數據空間的大小

進階
高階操作會縮小 的已使用資料空間,