NdisAllocateFragmentNetBufferList 函数 (ndis/nblapi.h)

调用 NdisAllocateFragmentNetBufferList 函数,以基于现有NET_BUFFER_LIST结构中的数据创建新的碎片 化NET_BUFFER_LIST 结构。

语法

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
  [in] NET_BUFFER_LIST *OriginalNetBufferList,
       NDIS_HANDLE     NetBufferListPool,
       NDIS_HANDLE     NetBufferPool,
  [in] ULONG           StartOffset,
  [in] ULONG           MaximumLength,
  [in] ULONG           DataOffsetDelta,
  [in] ULONG           DataBackFill,
  [in] ULONG           AllocateFragmentFlags
);

参数

[in] OriginalNetBufferList

指向现有NET_BUFFER_LIST结构的指针。

NetBufferListPool

从调用获取的句柄 NdisAllocateNetBufferListPool 函数。

NetBufferPool

以前从调用返回的NET_BUFFER结构池句柄 NdisAllocateNetBufferPool

[in] StartOffset

每个 NET_BUFFER 结构中数据开头的额外字节偏移量。 此偏移量除了每个NET_BUFFER结构中指定的 DataOffset 成员的值外。

[in] MaximumLength

新NET_BUFFER_LIST结构中每个片段的最大长度(以字节为单位)。 每个片段由NET_BUFFER结构描述。

[in] DataOffsetDelta

NDIS 应在新的NET_BUFFER结构中提供的额外 已用数据空间 量。

[in] DataBackFill

DataOffsetDelta 参数的值外,还需要分配所需的数据空间量。 如果 NDIS 必须分配内存来提供 DataOffsetDelta 中请求的数据空间,则它还应分配 DataBackFill 指定的额外空间。

[in] AllocateFragmentFlags

可与 OR 操作结合使用的 NDIS 标志。 将此参数设置为零。 目前没有为此函数定义的标志。

返回值

NdisAllocateFragmentNetBufferList 返回指向新碎片NET_BUFFER_LIST结构的指针。 如果分配失败,则返回值为 NULL

注解

NdisAllocateFragmentNetBufferList 分配并初始化新的片段NET_BUFFER_LIST结构和NET_BUFFER结构,这些结构描述调用方传递给 NdisAllocateFragmentNetBufferListNET_BUFFER_LIST结构所描述的数据相同。

如果片段NET_BUFFER_LIST结构应具有与给定池关联的属性,则调用方必须在 NetBufferListPoolHandleNetBufferPoolHandle 参数中指定池句柄。 例如,NET_BUFFER_LIST结构的 ProtocolType 成员与池相关联。

对于指定源NET_BUFFER_LIST结构中的每个NET_BUFFER结构,NDIS 将创建片段NET_BUFFER结构,如下所示:

  • NDIS 从源NET_BUFFER结构中 已用数据空间 的开头开始创建片段,并由 StartOffset 参数中指定的值偏移。
  • NDIS 将源NET_BUFFER结构中的 StartOffset ) 划分为片段后,使用的数据空间 (。
  • 每个片段 的已用数据空间 的长度小于或等于 MaximumLength 参数中指定的值。 最后一个片段 的已用数据空间 可以小于 MaximumLength
  • 每个片段由新的NET_BUFFER结构和一组新的 MDL 链描述。
  • 新NET_BUFFER结构的数据偏移量会撤退, (DataOffset 成员的值) 减少 DataOffsetDelta 参数中指定的字节数。
  • 如果 NDIS 必须分配内存来提供 DataOffsetDelta 中请求的数据空间,则它还应分配 DataBackFill 指定的额外空间。
NdisAllocateFragmentNetBufferList 创建的新片段NET_BUFFER_LIST结构不包括初始片段 NET_BUFFER_LIST_CONTEXT 结构。

调用 NdisFreeFragmentNetBufferList 函数可释放NET_BUFFER_LIST结构以及以前通过调用 NdisAllocateFragmentNetBufferList 分配的所有关联NET_BUFFER结构和 MDL 链。

要求

   
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
标头 ndis/nblapi.h (包括 ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function (ndis) 、NdisAllocateFragmentNetBufferList (ndis) 、NdisAllocateFragmentNetBufferList_InitFail (ndis)

请参阅

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList