共用方式為


NET_BUFFER結構 (ndis/nbl.h)

NET_BUFFER結構會指定透過網路傳輸或接收的數據。

語法

typedef struct _NET_BUFFER {
  union {
    struct {
      NET_BUFFER *Next;
      MDL        *CurrentMdl;
      ULONG      CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      MDL        *MdlChain;
      ULONG      DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT           ChecksumBias;
  USHORT           Reserved;
  NDIS_HANDLE      NdisPoolHandle;
  PVOID            NdisReserved[2];
  PVOID            ProtocolReserved[6];
  PVOID            MiniportReserved[4];
  PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    NET_BUFFER_SHARED_MEMORY *SharedMemoryInfo;
    SCATTER_GATHER_LIST      *ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

成員

Next

NET_BUFFER結構連結清單中下一個NET_BUFFER結構的指標。 如果此結構是清單中的最後一個NET_BUFFER結構,則此成員為 NULL。

CurrentMdl

目前驅動程式所使用的第一個 MDL 指標。 此成員提供優化,可略過目前驅動程式未使用的任何 MDL 來改善效能。

CurrentMdlOffset

目前Mdl 成員所指定 MDL 中已使用資料空間開頭的位移,以位元組為單位。

DataLength

MDL 鏈結中已使用之數據空間的長度,以位元組為單位。 最大長度為 0xFFFFFFFF 個字節。

stDataLength

MDL 鏈結中已使用之數據空間的長度,以位元組為單位。 最大長度為 0xFFFFFFFF 個字節。 這個成員與 DataLength 相同,但其類型 SIZE_T 而非 ULONG

MdlChain

對應數據緩衝區之 MDL 連結清單的指標。 數據緩衝區會儲存網路數據。

DataOffset

從 MDL 鏈結的開頭到 MDL 鏈結中網路數據的開頭,以位元組為單位的位移。 此位移也是 未使用數據空間的大小,以位元組為單位。

Link

保留給 NDIS。

NetBufferHeader

NET_BUFFER_HEADER結構。 基於相容性考慮,這是上述等位的重複專案。

ChecksumBias

計算總和檢查碼時,要略過數據緩衝區開頭的位元元組數目。 TCP/IP 通訊協定會使用此成員。

Reserved

保留供未來使用。

NdisPoolHandle

集區句柄,識別配置NET_BUFFER結構的NET_BUFFER集區。

NdisReserved[2]

保留給 NDIS。

ProtocolReserved[6]

保留供通訊協定驅動程式使用。 通訊協定驅動程式和 NDIS 中繼驅動程式可以針對自己的用途使用此區域。 中繼驅動程式只有在尚未使用時,才能使用此成員。

MiniportReserved[4]

保留供迷你埠驅動程式使用。 迷你埠驅動程式和 NDIS 中繼驅動程式可以針對自己的用途使用此區域。

DataPhysicalAddress

注意 此成員的名稱是 NDIS 6.0 驅動程式的 NdisReserved1 ,而 NDIS 6.1 和更新版本的驅動程式則是 DataPhysicalAddress 。 對於 NDIS 6.0 驅動程式,此成員會保留給 NDIS。
 
框架之數據部分的實體位址。 如果配置NET_BUFFER的驅動程式未指定位址,則此成員應該是零。 只有當NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER或NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD旗標是在與NET_BUFFER相關聯之NET_BUFFER_LIST結構的 NblFlags 成員中設定時,這個成員才有效。
注意 迷你埠驅動程式可以設定NET_BUFFER結構的 DataPhysicalAddress 成員,即使結構未與分割框架相關聯也一樣。 在此情況下, DataPhysicalAddress 包含標頭 MDL 的實體位址。
 

SharedMemoryInfo

的指標 NET_BUFFER_SHARED_MEMORY 結構。

ScatterGatherList

SCATTER_GATHER_LIST結構描述 DMA 的散佈/收集清單。

備註

NDIS 驅動程式可以呼叫下列函式來配置和初始化NET_BUFFER結構:

NDIS 驅動程式可以呼叫 NdisAllocateNetBufferListPool 函式,然後在配置NET_BUFFER_LIST結構集區時,將NET_BUFFER_LIST_POOL_PARAMETERS結構的 fAllocateNetBuffer 成員設定為 TRUE。 在此情況下,NET_BUFFER結構會預先配置驅動程式從集區配置的每個NET_BUFFER_LIST結構。

鏈結至每個NET_BUFFER結構,是對應包含網路封包數據的緩衝區的一或多個緩衝區描述項。 這些緩衝區描述項會指定為 NetBufferHeader 成員中的 MDL 鏈結。 已接收或傳輸這類網路封包數據。

若要存取 MDL 鏈結中的其他資料空間,NDIS 驅動程式可以呼叫下列函式:

NDIS 驅動程式通常會使用 NET_BUFFER結構的 MiniportReservedProtocolReserved 成員來維護NET_BUFFER結構內容資訊。
注意 只有一個驅動程式可以使用 MiniportReservedProtocolReserved 成員。 因此,如果另一個驅動程式使用了其中一個成員,中繼驅動程式就無法使用這些成員。
 
若要存取NET_BUFFER結構的成員,請使用下列宏和函式:

NET_BUFFER_NEXT_NB

NET_BUFFER_FIRST_MDL

NET_BUFFER_DATA_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_PROTOCOL_RESERVED

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NdisGetPoolFromNetBuffer

如需如何使用 net 緩衝區的詳細資訊,請參閱 NET_BUFFER架構

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
標頭 ndis/nbl.h (包含 ndis.h)

另請參閱

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_DATA_OFFSET

NET_BUFFER_FIRST_MDL

NET_BUFFER_HEADER

NET_BUFFER_LIST

NET_BUFFER_LIST_POOL_PARAMETERS

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_NEXT_NB

NET_BUFFER_PROTOCOL_RESERVED

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool

NdisGetPoolFromNetBuffer

NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart

SCATTER_GATHER_LIST