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结构描述的数据与 OriginalNetBufferList 中的 NET_BUFFER_LIST 结构所描述的数据相同。 NDIS 不会将原始 MDL 描述的数据复制到新的数据缓冲区。 相反,克隆的结构引用原始数据缓冲区。 克隆 NET_BUFFER_LIST 结构不包括初始 NET_BUFFER_LIST_CONTEXT 结构。

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

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
标头 ndis/nblapi.h (包括 ndis.h)
Library 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