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 使用。 驅動程式通常會使用的成員如下:
ProtocolReserved
保留供通訊協定驅動程式使用。
MiniportReserved
保留供迷你埠驅動程式使用。
NdisPoolHandle
指定集區控制碼,識別配置NET_BUFFER結構的NET_BUFFER集區。
下
指定NET_BUFFER結構連結清單中的下一個NET_BUFFER結構的指標。 如果這是清單中的最後一個NET_BUFFER結構,則此成員為 Null。
DataLength
指定 MDL 鏈結中網路資料的位元組長度。
DataOffset
指定從 MDL 鏈結的記憶體開始到 MDL 鏈結中網路資料的開頭,以位元組為單位的位移。
CurrentMdl
指定目前驅動程式所使用的第一個 MDL 指標。 此指標提供優化,藉由略過目前驅動程式未使用的任何 MDL 來改善效能。
CurrentMdlOffset
指定由 NET_BUFFER 結構 之 CurrentMdl 成員所指定之 MDL 中已使用之資料空間開頭的位移,以位元組為單位。
下圖顯示CurrentMdl、CurrentMdlOffset、DataOffset和DataLength成員與資料空間之間的關聯性。
NDIS 提供函式來管理 MDL 鏈結中的資料空間。 驅動程式如何以動態方式使用資料空間與目前驅動程式。 有時候,目前驅動程式目前未使用的資料空間。 雖然 目前未使用的資料空間 ,但它可以包含有效的資料。 例如,在接收路徑上,未使用 的資料空間 可以包含較低層級驅動程式所使用的標頭資訊。
驅動程式會執行進一步的作業,以增加和減少 使用的資料空間。 如需有關進階和進階作業的詳細資訊,請參閱 訂用帳戶和進階作業。
下列詞彙和定義描述 NET_BUFFER 資料空間的專案:
已使用的資料空間
已使用的資料空間 包含目前驅動程式在目前使用的資料。 驅動程式會增加具有進階作業 的已使用資料空間 ,並減少進階作業 的已使用資料空間 。
資料大小總計
資料大小總計是 已使用資料空間 和 未使用資料空間的大小總和。 若要計算總大小,請將 DataOffset 新增至 DataLength 。