FwpsAllocateDeepCloneNetBufferList0 函数 (fwpsk.h)
FwpsAllocateDeepCloneNetBufferList0 函数分配一个 NET_BUFFER_LIST 结构,该结构是现有 NET_BUFFER_LIST 结构的深层克隆。
语法
NTSTATUS FwpsAllocateDeepCloneNetBufferList0(
[in, out] NET_BUFFER_LIST *originalNetBufferList,
[in, optional] NDIS_HANDLE netBufferListPoolHandle,
[in, optional] NDIS_HANDLE netBufferPoolHandle,
[out] NET_BUFFER_LIST **netBufferList
);
参数
[in, out] originalNetBufferList
指向正在克隆的原始 NET_BUFFER_LIST 结构的指针。
[in, optional] netBufferListPoolHandle
从上一次调用 NdisAllocateNetBufferListPool 函数获得的 NET_BUFFER_LIST 池句柄。 此参数是可选的,可以 NULL。
[in, optional] netBufferPoolHandle
从上一次调用 NdisAllocateNetBufferPool 函数获取的 NET_BUFFER_LIST 池句柄。 此参数是可选的,可以 NULL。
[out] netBufferList
指向接收指向深层克隆 NET_BUFFER_LIST 结构的指针的变量的指针。
返回值
FwpsAllocateDeepCloneNetBufferList0 函数返回以下 NTSTATUS 代码之一。
返回代码 | 描述 |
---|---|
STATUS_SUCCESS | 已成功分配深层克隆 NET_BUFFER_LIST 结构。 |
其他状态代码 | 发生错误。 |
言论
标注驱动程序调用 FwpsAllocateDeepCloneNetBufferList0 函数来分配现有 NET_BUFFER_LIST 结构的深层克隆 NET_BUFFER_LIST 结构。
此函数是 NdisAllocateCloneNetBufferList 函数的包装器,但它专用于 WFP 数据包注入函数使用。
如果深层克隆 NET_BUFFER_LIST 结构应具有与特定池关联的属性,标注驱动程序必须在 NetBufferListPoolHandle 或 NetBufferPoolHandle 参数中指定池句柄。 如果这些参数 NULL,则使用 NDIS 预分配的默认池。
深度克隆 NET_BUFFER_LIST 结构描述了原始 NET_BUFFER_LIST 结构所描述的相同数据。 FwpsAllocateDeepCloneNetBufferList0 函数将原始 MDL 描述的数据复制到新的数据缓冲区。 克隆 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_BUFFER_LIST内插入或替换单个 net 缓冲区(NET_BUFFER)或 MDL。 驱动程序必须先撤消这些修改,然后才能调用 FwpsFreeCloneNetBufferList0 函数。
管理克隆数据包的准则
标注驱动程序不得无限期保存克隆的数据包。 克隆的数据包可能会干扰空闲计算机上的电源管理作。
粮食计划署中深层克隆数据包的预期用途是从用户模式应用程序或其他需要独立于原始数据包的数据包的相对快速作中获取说明。 标注驱动程序在等待用户输入、Web 服务清除或任何其他可能需要任意时间的作时,不得保留克隆的数据包。
标注驱动程序应始终尽快返回保留的数据包。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | WIP 内部版本 25324 |
目标平台 | 普遍 |
标头 | fwpsk.h (包括 Fwpsk.h) |
库 | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |