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) |