fwpsk.h) (FWPS_INCOMING_METADATA_VALUES0 结构
FWPS_INCOMING_METADATA_VALUES0 结构定义筛选器引擎传递给标注的 classifyFn 标注函数的元数据值。
语法
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 标头的偏移量(以字节为单位)。
在入站路径上, 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) 连接或接收/接受层时设置的。 有关详细信息,请参见“备注”部分。
headerIncludeHeader
如果数据包是从原始套接字发送的,则为指向 IP 标头的指针。
headerIncludeHeaderLength
headerIncludeHeader 指向的 IP 标头的长度(以字节为单位)。
destinationPrefix
目标前缀。
frameLength
帧长度。
parentEndpointHandle
终结点的父级的句柄。
icmpIdAndSequence
ICMP 标识符和序列。
localRedirectTargetPID
负责重定向连接的进程的 PID。
originalDestination
重定向连接的原始目标。
redirectRecords
可传递给 FwpsQueryConnectionRedirectState0 函数以获取重定向状态的重定向记录句柄。
currentL2MetadataValues
一个位掩码,其中包含指定设置第 2 层值的标志。 一个或多个值可与按位 OR 组合使用。
l2Flags
包含可与按位 OR 组合的第 2 层标志的位掩码。
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结构的指针传递给标注的 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) |
另请参阅
FWPS_INBOUND_FRAGMENT_METADATA0反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈