fwpsk.h) (FWPS_INCOMING_METADATA_VALUES0 结构

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

请注意,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

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

flags

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

reserved

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

discardMetadata

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

flowHandle

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

ipHeaderSize

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

在入站路径上, ipHeaderSizetransportHeaderSize 成员结合使用时,指定要从数据偏移位置撤退到 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

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

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

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

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 标头的指针。

注意 仅适用于 Windows Server 2008、Windows Vista SP1 和更高版本的 Windows。
 

headerIncludeHeaderLength

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

注意 仅适用于 Windows Server 2008、Windows Vista SP1 和更高版本的 Windows。
 

destinationPrefix

目标前缀。

注意 仅适用于 Windows 7 及更高版本的 Windows。
 

frameLength

帧长度。

注意 仅适用于 Windows 7 及更高版本的 Windows。
 

parentEndpointHandle

终结点的父级的句柄。

注意 仅适用于 Windows 7 及更高版本的 Windows。
 

icmpIdAndSequence

ICMP 标识符和序列。

注意 仅适用于 Windows 7 及更高版本的 Windows。
 

localRedirectTargetPID

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

注意 仅适用于 Windows 7 及更高版本的 Windows。
 

originalDestination

重定向连接的原始目标。

注意 仅适用于 Windows 7 及更高版本的 Windows。
 

redirectRecords

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

currentL2MetadataValues

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 
含义
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 层标志的位掩码。

注意仅适用于 Windows 8 及更高版本的 Windows。
 
含义
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 不会设置此标志。 组的所有后续 NCL 都将设置此标志。

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

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

ethernetMacHeaderSize

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

wiFiOperationMode

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

vSwitchSourcePortId

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

vSwitchSourceNicIndex

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

vSwitchDestinationPortId

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

padding0

保留。

注意仅适用于 Windows 8 及更高版本的 Windows。
 

padding1

保留。

注意仅适用于 Windows 8 及更高版本的 Windows。
 

padding2

保留。

注意仅适用于 Windows 8 及更高版本的 Windows。
 

vSwitchPacketContext

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

注意仅适用于 Windows 8 及更高版本的 Windows。
 

subProcessTag

保留。

注意仅适用于 Windows 8 及更高版本的 Windows。
 

reserved1

注解

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

标注驱动程序可以使用以下宏来测试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 连接或接收/接受层,如果 packetDirection 设置为 FWP_DIRECTION_OUTBOUND 并且存在FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值,则标注驱动程序不应假定数据包包含有效的 IP 标头。
  • 在 ALE 连接层,如果FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值不存在,标注驱动程序应假定数据包方向FWP_DIRECTION_OUTBOUND。
  • 在 ALE 接收/接受层,如果FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值不存在,标注驱动程序应假定数据包方向FWP_DIRECTION_INBOUND。

要求

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

另请参阅

CMSGHDR

FWPS_DISCARD_METADATA0

FWPS_INBOUND_FRAGMENT_METADATA0

FWP_BYTE_BLOB

FWP_DIRECTION

FwpsQueryConnectionRedirectState0

NET_BUFFER_LIST

classifyFn