FwpsInjectMacReceiveAsync0 函数 (fwpsk.h)
FwpsInjectMacReceiveAsync0 函数可以重新注入以前吸收的媒体访问控制 (MAC) 帧 (或) 帧克隆回到从中截获的第 2 层入站数据路径,或注入发明的 MAC 帧。
语法
NTSTATUS FwpsInjectMacReceiveAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[in] UINT16 layerId,
[in] IF_INDEX interfaceIndex,
[in] NDIS_PORT_NUMBER NdisPortNumber,
[in, out] NET_BUFFER_LIST *netBufferLists,
[in] FWPS_INJECT_COMPLETE completionFn,
[in, optional] HANDLE completionContext
);
参数
[in] injectionHandle
以前通过调用 FwpsInjectionHandleCreate0 函数获取的注入句柄, 标志 参数设置为 FWPS_INJECTION_TYPE_L2。
[in, optional] injectionContext
注入上下文的可选句柄。 如果指定,可以通过调用 获取当数据包注入状态FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF或FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF时,FwpsQueryPacketInjectionState0 函数。
[in] flags
保留。 必须设置为零。
[in] layerId
正在处理数据流的筛选层的运行时标识符。
[in] interfaceIndex
传递给标注驱动程序的 分类Fn 传入值的接口索引FWPS_FIELD_XxxMAC_FRAMEXxx_INTERFACE_INDEX。
[in] NdisPortNumber
传递给标注驱动程序的 分类Fn 传入值的 NDIS 端口号FWPS_FIELD_XxxMAC_FRAMEXxx_NDIS_PORT。
[in, out] netBufferLists
指向描述要注入的数据包数据的 NET_BUFFER_LIST 结构的指针。 标注驱动程序通过调用 FwpsAllocateCloneNetBufferList0 函数或 FwpsAllocateNetBufferAndNetBufferList0 函数来分配用于注入数据包数据的NET_BUFFER_LIST结构。
如果为 (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET)
,则NET_BUFFER_LIST必须以以太网标头开头。
如果为 (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE)
,则NET_BUFFER_LIST必须以 MAC 标头开头。
[in] completionFn
指向标注驱动程序提供的 completionFn 标注函数的指针。 在 netBufferLists 参数描述的数据包数据注入网络堆栈后,筛选器引擎会调用此函数。 注入克隆或创建的NET_BUFFER_LIST结构时,必须指定此指针。 注入原始NET_BUFFER_LIST结构时,如果未更改原始结构,此参数可以为 NULL。
[in, optional] completionContext
指向标注驱动程序提供的上下文的指针,该上下文传递给 由 completionFn 参数指向的标注函数。 此参数是可选的,可以为 NULL。
返回值
FwpsInjectMacReceiveAsync0 函数返回以下 NTSTATUS 代码之一。
返回代码 | 说明 |
---|---|
|
已成功启动 MAC 帧数据注入。 筛选器引擎在完成注入 MAC 帧数据后或随后发生错误时调用完成函数。 如果出现错误,已完成NET_BUFFER_LIST结构的 Status 成员将指示失败的原因。 |
|
MAC 层尚未准备好接受数据包数据的注入。 |
|
注入句柄正在关闭。 |
|
注入句柄不是使用 的标志 参数创建的 FwpsInjectionHandleCreate0 函数设置为 FWPS_INJECTION_TYPE_L2。 |
|
出现了错误。 |
注解
回调驱动程序调用 FwpsInjectMacReceiveAsync0 函数,以将以前吸收的 MAC 帧 (或) 的帧克隆重新注入到从中截获的第 2 层入站数据路径,或注入发明的 MAC 帧。
netBufferLists 参数可以是NET_BUFFER_LIST链。 但是,每次都可以多次调用完成函数,完成链 (段或单个NET_BUFFER_LIST) 。
如果数据包与最初分类的相同筛选器匹配,则注入的帧可能会再次被分类。 因此,与 IP 层的标注一样,第 2 层标注还必须通过调用 FwpsQueryPacketInjectionState0 来防止无限数据包检查。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用。 |
目标平台 | 通用 |
标头 | fwpsk.h (包括 Fwpsk.h) |
Library | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |