fwpsu.h) (FWPS_INCOMING_METADATA_VALUES0 结构
定义筛选器引擎传递给标注的 classifyFn 标注函数的元数据值。
注意
FWPS_INCOMING_METADATA_VALUES0 是 FWPS_INCOMING_METADATA_VALUES的特定版本。 有关详细信息,请参阅 WFP 版本无关的名称和面向特定版本的 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;
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 标头的偏移量(以字节为单位)。
在入站路径上, 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
仅当在 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 中可用。
vSwitchPacketContext
虚拟交换机数据包上下文的句柄。
仅在 Windows 8 及更高版本的 Windows 中可用。
subProcessTag
保留。
reserved1
保留。
注解
筛选器引擎将指向 FWPS_INCOMING_METADATA_VALUES0 结构的指针传递给标注的 classifyFn 标注函数。 结构中包含的元数据值不由筛选器引擎处理,而是提供给标注的 classifyFn 标注函数以提供其他信息。
标注驱动程序可以使用以下宏来测试 FWPS_INCOMING_METADATA_VALUES0 结构中是否存在特定的元数据值:
FWPS_IS_METADATA_FIELD_PRESENT(metadataValues, metadataField)
如果FWPS_INCOMING_METADATA_VALUES0结构中存在FWPS_METADATA_FIELD_PACKET_DIRECTION元数据值,则 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。
要求
要求 | 值 |
---|---|
Header | fwpsu.h |