FwpsAllocateCloneNetBufferList0 函数 (fwpsk.h)
FwpsAllocateCloneNetBufferList0 函数分配一个NET_BUFFER_LIST结构,该结构是现有NET_BUFFER_LIST结构的克隆。
语法
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 代码之一。
返回代码 | 说明 |
---|---|
|
已成功分配克隆 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 |