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

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

[in] allocateCloneFlags

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

[out] netBufferList

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

返回值

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

返回代码 描述
STATUS_SUCCESS
已成功分配克隆 NET_BUFFER_LIST 结构。
其他状态代码
发生错误。

言论

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

此函数是围绕 NdisAllocateCloneNetBufferList 函数,但它专用于粮食计划署 数据包注入函数

如果克隆NET_BUFFER_LIST结构应具有与特定池关联的属性,标注驱动程序必须在 NetBufferListPoolHandleNetBufferPoolHandle 参数中指定池句柄。 如果这些参数 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 函数。

有关管理克隆数据包的 准则

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

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

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

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

要求

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

另请参阅

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

数据包注入函数