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 链描述。
  • 新的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 (include ndis.h)
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