NET_BUFFER結構
NDIS 6.0 和更新版本 NET_BUFFER 結構類似於 NDIS 5 所使用的 NDIS_PACKET 結構。x 和舊版驅動程式。 每個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 中已使用數據空間的開頭。
下圖顯示 CurrentMdl、CurrentMdlOffset、DataOffset和 DataLength 成員和數據空間之間的關聯性。
NDIS 提供函式來管理 MDL 鏈結中的數據空間。 駕駛員使用數據空間的方式會隨著當前的駕駛員而動態改變。 有時候會有目前驅動程式尚未使用的數據空間。 雖然 未使用的數據空間 目前未使用,但它可以包含有效的數據。 例如,在接收路徑上,未使用的數據空間 可以包含較低層級驅動程式所使用的標頭資訊。
驅動程式會執行撤退和推進作業,以增加和減少 使用的數據空間。 如需撤退和進階作業的詳細資訊,請參閱 撤退和進階作業。
下列詞彙和定義描述 NET_BUFFER 資料空間的元素:
已使用的資料空間
已使用的數據空間 包含目前驅動程式目前使用的數據。 驅動程式會透過撤退作業增加 已使用的數據空間,並透過進階作業減少 已使用的數據空間。
數據大小總計
資料大小總計是已使用資料空間 大小的總和,未使用的數據空間。 若要計算總大小,請將 DataOffset 加到 DataLength 。