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 结构,这些结构描述调用方传递给 NdisAllocateFragmentNetBufferList 的NET_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 链来描述。
  • (DataOffset 成员的值按 DataOffsetDelta 参数中指定的字节数减少) ,新NET_BUFFER结构的数据偏移量将回退。
  • 如果 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