FwpsAllocateCloneNetBufferList0 函数 (fwpsk.h)

FwpsAllocateCloneNetBufferList0 函数分配一个NET_BUFFER_LIST结构,该结构是现有NET_BUFFER_LIST结构的克隆。

注意FwpsAllocateCloneNetBufferList0FwpsAllocateCloneNetBufferList 的特定版本。 有关详细信息 ,请参阅 WFP Version-Independent 名称和面向 Windows 的特定版本
 

语法

NTSTATUS FwpsAllocateCloneNetBufferList0(
  [in, out]      NET_BUFFER_LIST *originalNetBufferList,
  [in, optional] NDIS_HANDLE     netBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     netBufferPoolHandle,
  [in]           ULONG           allocateCloneFlags,
  [out]          NET_BUFFER_LIST **netBufferList
);

参数

[in, out] originalNetBufferList

指向正在克隆的原始 NET_BUFFER_LIST 结构的指针。

[in, optional] netBufferListPoolHandle

NET_BUFFER_LIST池句柄,该句柄是从之前对 的调用获取的 NdisAllocateNetBufferListPool 函数。 此参数是可选的,可以为 NULL

[in, optional] netBufferPoolHandle

NET_BUFFER池句柄,该句柄是从上一次调用 NdisAllocateNetBufferPool 函数获取的。 此参数是可选的,可以为 NULL

[in] allocateCloneFlags

当前没有为此函数定义标志。 标注驱动程序应将此参数设置为零。

[out] netBufferList

指向变量的指针,该变量接收指向克隆 NET_BUFFER_LIST 结构的指针。

返回值

FwpsAllocateCloneNetBufferList0 函数返回以下 NTSTATUS 代码之一。

返回代码 说明
STATUS_SUCCESS
已成功分配克隆 NET_BUFFER_LIST 结构。
其他状态代码
出现了错误。

注解

标注驱动程序调用 FwpsAllocateCloneNetBufferList0 函数来分配现有 NET_BUFFER_LIST 结构的克隆NET_BUFFER_LIST结构。

此函数是围绕 NdisAllocateCloneNetBufferList 函数,但它专用于 WFP 数据包注入函数

如果克隆NET_BUFFER_LIST结构应具有与特定池关联的属性,则标注驱动程序必须在 NetBufferListPoolHandle 或 NetBufferPoolHandle 参数中指定池 句柄 。 如果这些参数为 NULL,则使用 NDIS 预分配的默认池。

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

此函数将新创建的克隆NET_BUFFER_LIST结构的 ParentNetBufferList 成员设置为指向父NET_BUFFER_LIST结构。 父结构的 ChildRefCount 成员递增 1。

标注驱动程序可以修改克隆NET_BUFFER_LIST结构,并通过调用 数据包注入函数将其注入到网络堆栈中,以取代原始NET_BUFFER_LIST结构。 克隆NET_BUFFER_LIST结构描述的数据成功注入网络堆栈后,标注驱动程序通过调用 FwpsFreeCloneNetBufferList0 函数释放克隆NET_BUFFER_LIST结构。

标注驱动程序可以在克隆净缓冲区列表中插入或替换单个 net 缓冲区 (NET_BUFFER) 或 MDL。 此类驱动程序还必须在调用 之前撤消修改 FwpsFreeCloneNetBufferList0 函数。

管理克隆数据包的指南

标注驱动程序不得无限期保存克隆的数据包。 克隆的数据包可能会干扰空闲计算机上的电源管理操作。

WFP 中克隆数据包的预期用途是从用户模式应用程序或其他相对快速的操作获取说明。 例如,在等待用户输入、等待 Web 服务清除或等待可能需要任意时间的其他任何操作时,标注驱动程序不得保存克隆的数据包。

如果标注驱动程序需要等待可能较长的操作,它会使用 生成数据包的深层副本 FwpsAllocateNetBufferAndNetBufferList0,它会阻止和吸收原始数据包。

标注驱动程序应始终尽快返回保留的数据包。

要求

要求
最低受支持的客户端 从 Windows Vista 开始可用。
目标平台 通用
标头 fwpsk.h (包括 Fwpsk.h)
Library Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

另请参阅

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

数据包注入函数