FWPS_INCOMING_METADATA_VALUES0结构(fwpsk.h)

FWPS_INCOMING_METADATA_VALUES0 结构定义筛选器引擎传递给标注的 分类Fn 标注函数的元数据值。

注意

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

语法

typedef struct FWPS_INCOMING_METADATA_VALUES0_ {
  UINT32                          currentMetadataValues;
  UINT32                          flags;
  UINT64                          reserved;
  FWPS_DISCARD_METADATA0          discardMetadata;
  UINT64                          flowHandle;
  UINT32                          ipHeaderSize;
  UINT32                          transportHeaderSize;
  FWP_BYTE_BLOB                   *processPath;
  UINT64                          token;
  UINT64                          processId;
  UINT32                          sourceInterfaceIndex;
  UINT32                          destinationInterfaceIndex;
  ULONG                           compartmentId;
  FWPS_INBOUND_FRAGMENT_METADATA0 fragmentMetadata;
  ULONG                           pathMtu;
  HANDLE                          completionHandle;
  UINT64                          transportEndpointHandle;
  SCOPE_ID                        remoteScopeId;
  WSACMSGHDR                      *controlData;
  ULONG                           controlDataLength;
  FWP_DIRECTION                   packetDirection;
  PVOID                           headerIncludeHeader;
  ULONG                           headerIncludeHeaderLength;
  IP_ADDRESS_PREFIX               destinationPrefix;
  UINT16                          frameLength;
  UINT64                          parentEndpointHandle;
  UINT32                          icmpIdAndSequence;
  DWORD                           localRedirectTargetPID;
  SOCKADDR                        *originalDestination;
  HANDLE                          redirectRecords;
  UINT32                          currentL2MetadataValues;
  UINT32                          l2Flags;
  UINT32                          ethernetMacHeaderSize;
  UINT32                          wiFiOperationMode;
  NDIS_SWITCH_PORT_ID             vSwitchSourcePortId;
  NDIS_SWITCH_NIC_INDEX           vSwitchSourceNicIndex;
  NDIS_SWITCH_PORT_ID             vSwitchDestinationPortId;
  UINT32                          padding0;
  USHORT                          padding1;
  UINT32                          padding2;
  HANDLE                          vSwitchPacketContext;
  PVOID                           subProcessTag;
  UINT64                          reserved1;
} FWPS_INCOMING_METADATA_VALUES0;

成员

currentMetadataValues

包含 元数据字段标识符组合的按位 OR 的 UINT32 值, 指定结构中设置的元数据值。

flags

筛选器引擎在内部使用。 标注驱动程序应忽略此成员。

reserved

保留供系统使用。 标注驱动程序应忽略此成员。

discardMetadata

FWPS_DISCARD_METADATA0 结构,描述数据被丢弃的原因。 仅当 FWPS_METADATA_FIELD_DISCARD_REASON 标志在 currentMetadataValues 成员中设置时,此成员才包含有效数据。

flowHandle

数据流的句柄。 仅当在 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_FLOW_HANDLE标志时,此成员才包含有效数据。

ipHeaderSize

IP 标头的偏移量(以字节为单位)。

在入站路径上,ipHeaderSize,与 transportHeaderSize 成员结合使用时,指定要从数据偏移位置撤退到 IP 标头开头的字节数。

在以下入站 ICMP 错误层中,仅 ipHeaderSize 指定要从数据偏移量回退到 IP 标头开头的字节总数:

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD

FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

在出站路径上,如果 ipHeaderSize 大于零,则指定要从数据偏移位置前进到 IP 标头末尾的字节数。

此成员不适用于以下层的出站路径:

FWPS_LAYER_DATAGRAM_DATA_V4

FWPS_LAYER_DATAGRAM_DATA_V6

FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD

FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD

仅当 FWPS_METADATA_FIELD_IP_HEADER_SIZE 标志在 currentMetadataValues 成员中设置时,此成员才包含有效数据。

transportHeaderSize

传输标头的偏移量或大小(以字节为单位)。

在入站路径上,transportHeaderSize 指定要从数据偏移位置撤退到传输标头末尾的字节数。

在以下入站 ICMP 错误层中,transportHeaderSize 指定 ICMP 标头的大小:

  • FWPS_LAYER_INBOUND_ICMP_ERROR_V4
  • FWPS_LAYER_INBOUND_ICMP_ERROR_V6
  • FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD
  • FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

在出站路径上,transportHeaderSize 指定要从数据偏移位置前进到传输标头末尾的字节数。

仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_TRANSPORT_HEADER_SIZE标志时,此成员才包含有效数据。

processPath

指向 FWP_BYTE_BLOB 结构的指针,该结构包含拥有终结点的进程的完整路径。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_PROCESS_PATH标志时,此成员才包含有效数据。

token

用于验证用户权限的令牌句柄。 仅当在 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_TOKEN标志时,此成员才包含有效数据。

processId

拥有终结点的进程的进程 ID。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_PROCESS_ID标志时,此成员才包含有效数据。

sourceInterfaceIndex

接收传入数据包的网络接口的索引。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_SOURCE_INTERFACE_INDEX标志时,此成员才包含有效数据。

destinationInterfaceIndex

要发送传出数据包的网络接口的索引。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_DESTINATION_INTERFACE_INDEX标志时,此成员才包含有效数据。

compartmentId

在其中接收或发送数据包的路由隔离舱的标识符。 应将任何修改后的数据包注入回原始数据包所指示的同一路由隔离舱。 仅当FWPS_METADATA_FIELD_COMPARTMENT_ID标志在 currentMetadataValues 成员中设置时,此成员才包含有效数据。

fragmentMetadata

描述已接收数据包片段的片段数据的 FWPS_INBOUND_FRAGMENT_METADATA0 结构。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_FRAGMENT_DATA标志时,此成员才包含有效数据。

pathMtu

出站数据包的路径最大传输单元(路径 MTU)。 此值指示网络可以在没有碎片的情况下传输的最大物理数据包大小(以字节为单位)。仅当 currentMetadataValues 成员中设置了FWPS_METADATA_FIELD_PATH_MTU标志时,此成员才包含有效数据。

completionHandle

笔触当前筛选操作所需的完成句柄。 仅当在 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_COMPLETION_HANDLE标志时,此成员才包含有效数据。

transportEndpointHandle

一个终结点句柄,指示要注入到出站传输层中的数据包的末尾。 仅当在 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_TRANSPORT_ENDPOINT_HANDLE标志时,此成员才包含有效数据。

remoteScopeId

要用于出站传输层注入的远程范围标识符。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_REMOTE_SCOPE_ID标志时,此成员才包含有效数据。

controlData

可选的套接字控件数据对象。 仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_TRANSPORT_CONTROL_DATA标志时,此成员才包含有效数据。 有关 WSACMSGHDR 类型的信息,请参阅 CMSGHDR

controlDataLength

controlData 成员的长度(以字节为单位)。

packetDirection

FWP_DIRECTION常量值之一指定的网络流量(入站或出站)方向。 在重新授权分类操作期间,此成员在应用程序层强制实施(ALE)连接或接收/接受层上设置。 有关详细信息,请参阅“备注”部分。

注意

仅当 currentMetadataValues 成员中设置FWPS_METADATA_FIELD_PACKET_DIRECTION标志时,此成员才包含有效数据。

headerIncludeHeader

如果数据包是从原始套接字发送的,则指向 IP 标头的指针。

headerIncludeHeaderLength

headerIncludeHeader指向的 IP 标头的长度(以字节为单位)。

destinationPrefix

目标前缀。

frameLength

帧长度。

parentEndpointHandle

终结点父级的句柄。

icmpIdAndSequence

ICMP 标识符和序列。

localRedirectTargetPID

负责重定向连接的进程的 PID。

originalDestination

重定向连接的原始目标。

redirectRecords

可传递给 FwpsQueryConnectionRedirectState0 函数以获取重定向状态的重定向记录句柄。

currentL2MetadataValues

包含指定设置第 2 层值的标志的位掩码。 一个或多个值可以与按位 OR 组合。

价值 意义
FWPS_L2_METADATA_FIELD_ETHERNET_MAC_HEADER_SIZE ethernetMacHeaderSize 成员的值指示 MAC 标头的大小。
FWPS_L2_METADATA_FIELD_WIFI_OPERATION_MODE wiFiOperationMode 成员的值指示当前的 Native 802.11 操作模式。
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_PORT_ID vSwitchSourcePortId 成员的值指示虚拟交换机上源端口的标识符。
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_NIC_INDEX vSwitchSourceNicIndex 成员的值指示虚拟交换机上源 NIC 的索引。
FWPS_L2_METADATA_FIELD_VSWITCH_PACKET_CONTEXT vSwitchPacketContext 成员的值指示虚拟交换机数据包上下文的 HANDLE。
FWPS_L2_METADATA_FIELD_VSWITCH_DESTINATION_PORT_ID vSwitchDestinationPortId 成员的值指示虚拟交换机上目标端口的标识符。

l2Flags

包含可以与按位 OR 组合的第 2 层标志的位掩码。

价值 意义
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV4_FRAMING 指示原始 IP4 框架。
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV6_FRAMING 指示原始 IP6 框架。
FWPS_L2_INCOMING_FLAG_RECLASSIFY_MULTI_DESTINATION 此标志指示在入口时一次看到的 NBL 已分发到多个 NBL 中,每个 NBL 都发往不同的 VM,并且此分发的第一个 NBL 已指示给标注驱动程序。

分布式组的第一个 NBL 不会设置此标志。 组的所有后续 NBL 都将设置此标志。

为了进行注入,标注驱动程序应克隆 NBL、阻止和吸收原始数据包,并清除第一个指示的FWPS_RIGHT_ACTION_WRITE标志。 然后修改克隆并将其注入入口路径。

对于所有后续指示,应阻止并吸收原始数据包,并清除克隆的FWPS_RIGHT_ACTION_WRITE标志。 当注入的克隆从入口中传出时,它将再次重新分发,并且所有指示都将具有注入状态FWPS_PACKET_INJECTED_BY_SELF或FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF。

ethernetMacHeaderSize

如果设置了FWPS_L2_METADATA_FIELD_802_3_MAC_HEADER_SIZE标志,则 MAC 标头的大小(以字节为单位)。 此标志仅为入站 802.3 层设置。

wiFiOperationMode

如果设置了FWPS_L2_METADATA_FIELD_802_11_OPERATION_MODE标志,则为当前的 Native 802.11 操作模式。 有关详细信息,请参阅 DOT11_CURRENT_OPERATION_MODE

vSwitchSourcePortId

虚拟交换机上源端口的唯一标识符。

vSwitchSourceNicIndex

虚拟交换机上源 NIC 的索引。

vSwitchDestinationPortId

虚拟交换机上目标端口的唯一标识符。

padding0

保留。

padding1

保留。

padding2

保留。

vSwitchPacketContext

虚拟交换机数据包上下文的句柄。

subProcessTag

保留。

reserved1

保留。

言论

筛选器引擎将指向FWPS_INCOMING_METADATA_VALUES0结构的指针传递给标注的 分类Fn 标注函数。 结构中包含的元数据值不会由筛选器引擎处理,而是提供给标注的 分类Fn 标注函数,以提供其他信息。

标注驱动程序可以使用以下宏来测试特定元数据值是否存在于FWPS_INCOMING_METADATA_VALUES0结构中:

FWPS_IS_METADATA_FIELD_PRESENT(metadataValues, metadataField)

如果FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值存在于FWPS_INCOMING_METADATA_VALUES0结构中,则 packetDirection 成员指定数据包在重新授权分类操作期间是入站还是出站。 否则,FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值不存在。

标注驱动程序在检查数据包时必须遵循以下准则:

  • 在 ALE 连接或接收/接受层中,标注驱动程序不应假定数据包包含有效的 IP 标头(如果 packetDirection 设置为 FWP_DIRECTION_OUTBOUND 且存在FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值)。
  • 在 ALE 连接层,如果FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值不存在,标注驱动程序应假定FWP_DIRECTION_OUTBOUND数据包方向。
  • 在 ALE 接收/接受层,如果FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值不存在,标注驱动程序应假定数据包方向为FWP_DIRECTION_INBOUND。

要求

要求 价值
最低支持的客户端 从 Windows Vista 开始可用。
标头 fwpsk.h (包括 Fwpsk.h)

另请参阅