FwpsInjectMacReceiveAsync0 函数 (fwpsk.h)

FwpsInjectMacReceiveAsync0 函数可以将以前吸收的媒体访问控制(或帧的克隆)重新转换为第 2 层入站数据路径,从中截获它或注入发明的 MAC 帧。

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

 

语法

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 标志。

注意FwpsInjectionHandleCreate0 函数的 addressFamily 参数设置为 AF_UNSPEC。
 

[in, optional] injectionContext

注入上下文的可选句柄。 如果指定,可以通过调用当数据包注入状态 FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELFFWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF时, FwpsQueryPacketInjectionState0 函数。

[in] flags

保留。 必须设置为零。

[in] layerId

正在处理数据流的筛选层的运行时标识符。

[in] interfaceIndex

传递给标注驱动程序的接口索引 分类Fn 传入值FWPS_FIELD_XxxMAC_FRAMEXxx_INTERFACE_INDEX。

[in] NdisPortNumber

传递给标注驱动程序的 NDIS 端口号 分类Fn 传入值FWPS_FIELD_XxxMAC_FRAMEXxx_NDIS_PORT。

[in, out] netBufferLists

指向描述正在注入的数据包数据的 NET_BUFFER_LIST 结构的指针。 标注驱动程序通过调用 FwpsAllocateCloneNetBufferList0 函数或 FwpsAllocateNetBufferList0 函数来分配用于注入数据包数据的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 代码之一。

返回代码 描述
STATUS_SUCCESS
已成功启动 MAC 帧数据注入。 筛选器引擎在筛选器引擎完成注入 MAC 帧数据或随后发生错误后调用完成函数。 如果出现错误,已完成 NET_BUFFER_LIST 结构的 状态 成员将指示失败的原因。
STATUS_FWP_TCPIP_NOT_READY
MAC 层尚未准备好接受数据包数据的注入。
STATUS_FWP_INJECT_HANDLE_CLOSING
正在关闭注入句柄。
STATUS_FWP_INJECT_HANDLE_STALE
未使用 标志 参数创建注入句柄 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)
Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

另请参阅

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsInjectionHandleCreate0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

分类Fn

completionFn