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 中由 CurrentMdl 成员指定的已用数据空间开头的偏移量(以字节为单位)。
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
SharedMemoryInfo
指向 的指针 NET_BUFFER_SHARED_MEMORY 结构。
ScatterGatherList
SCATTER_GATHER_LIST 结构描述了 DMA 的散点/收集列表。
注解
NDIS 驱动程序可以调用以下函数来分配和初始化NET_BUFFER结构:
NDIS 驱动程序可以调用分配NET_BUFFER_LIST结构池时,NdisAllocateNetBufferListPool 函数,然后将 NET_BUFFER_LIST_POOL_PARAMETERS 结构的 fAllocateNetBuffer 成员设置为 TRUE。 在这种情况下,NET_BUFFER结构预分配了驱动程序从池中分配的每个NET_BUFFER_LIST结构。链接到每个NET_BUFFER结构是映射包含网络数据包数据的缓冲区的一个或多个缓冲区描述符。 这些缓冲区描述符指定为 NetBufferHeader 成员中的 MDL 链。 此类网络数据包数据已接收或将被传输。
若要访问 MDL 链中的其他数据空间,NDIS 驱动程序可以调用以下函数:
NDIS 驱动程序通常使用 NET_BUFFER 结构的 MiniportReserved 或 ProtocolReserved 成员来维护NET_BUFFER结构上下文信息。有关如何使用 net 缓冲区的详细信息,请参阅 NET_BUFFER 体系结构。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.0 及更高版本中受支持。 |
标头 | ndis/nbl.h (包括 ndis.h) |
另请参阅
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart