FWPS_INCOMING_METADATA_VALUES0結構 (fwpsk.h)
FWPS_INCOMING_METADATA_VALUES0 結構會定義篩選引擎傳遞至圖說文字 分類Fn 圖說函式的元數據值。
注意
FWPS_INCOMING_METADATA_VALUES0 是特定版本的 FWPS_INCOMING_METADATA_VALUES。 如需詳細資訊,請參閱 糧食計劃署 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 標頭的位移,以位元組為單位。
在輸入路徑上,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
只有在目前的MetadataValues 成員
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
擁有端點之進程的進程標識碼。 只有當 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標頭的指標。
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 將不會設定此旗標。 群組的所有後續 NCL 都會設定此旗標。 為了插入的目的,您的圖說驅動程式應該複製 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結構。 結構中包含的元數據值不會由篩選引擎處理,但會提供給圖說文字的 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) |