NdisAllocateCloneNetBufferList 函数 (ndis/nblapi.h)

调用 NdisAllocateCloneNetBufferList 函数创建新的克隆 NET_BUFFER_LIST 结构。

语法

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateCloneNetBufferList(
  [in]           NET_BUFFER_LIST *OriginalNetBufferList,
  [in, optional] NDIS_HANDLE     NetBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     NetBufferPoolHandle,
  [in]           ULONG           AllocateCloneFlags
);

参数

[in] OriginalNetBufferList

指向现有 NET_BUFFER_LIST 结构的指针。

[in, optional] NetBufferListPoolHandle

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

[in, optional] NetBufferPoolHandle

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

[in] AllocateCloneFlags

可与 OR作结合使用的 NDIS 标志。 定义了以下标志:

NDIS_CLONE_FLAGS_RESERVED

保留为 NDIS。

NDIS_CLONE_FLAGS_USE_ORIGINAL_MDLS

如果设置了此标志,则 NDIS 不会为克隆 NET_BUFFER_LIST分配新的 MDL。 相反,克隆的 NET_BUFFER_LIST 使用与原始 NET_BUFFER_LIST相同的 MDL 链。 如果清除NDIS_CLONE_FLAGS_USE_ORIGINAL_MDLS,NDIS 会分配新的 MDL 以引用原始数据缓冲区。

返回值

NdisAllocateCloneNetBufferList 返回指向新克隆 NET_BUFFER_LIST 结构的指针。 如果分配失败,则此指针 NULL

言论

调用 NdisAllocateCloneNetBufferList 来创建克隆 NET_BUFFER_LIST 结构,该结构可用于在单独的数据路径上发送重复数据。

原始 NET_BUFFER_LIST 结构中的每个 NET_BUFFER 结构仅从已用数据空间的开头克隆,而不是整个数据空间的开始。 若要从数据空间的开头到已用数据空间的开头获取偏移量,请使用 NET_BUFFER_DATA_OFFSET 宏。

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

克隆 NET_BUFFER_LIST 结构描述了 OriginalNetBufferListNET_BUFFER_LIST 结构所描述的相同数据。 NDIS 不会将原始 MDL 描述的数据复制到新的数据缓冲区。 相反,克隆的结构引用原始数据缓冲区。 克隆 NET_BUFFER_LIST 结构不包括初始 NET_BUFFER_LIST_CONTEXT 结构。

调用 NdisFreeCloneNetBufferList 函数,以释放 NET_BUFFER_LIST 结构以及通过调用 NdisAllocateCloneNetBufferList分配的所有关联结构和 MDL 链。

要求

要求 价值
最低支持的客户端 NDIS 6.0 及更高版本中受支持。
目标平台 普遍
标头 ndis/nblapi.h (include ndis.h)
Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function(ndis),NdisAllocateCloneNetBufferList(ndis),NdisAllocateCloneNetBufferList_InitFail(ndis)

另请参阅

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeCloneNetBufferList