FWPS_INCOMING_METADATA_VALUES0 結構 (fwpsu.h)
定義篩選引擎傳遞至圖說文字 的分類Fn 圖說文字函式的元數據值。
注意
FWPS_INCOMING_METADATA_VALUES0 是特定版本的 FWPS_INCOMING_METADATA_VALUES。 如需詳細資訊,請參閱 以特定 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 結構,描述數據遭到捨棄的原因。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_DISCARD_REASON旗標時,這個成員才會包含有效的數據。
flowHandle
數據流的句柄。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_FLOW_HANDLE旗標時,此成員才會包含有效的數據。
ipHeaderSize
IP 標頭的位移,以位元組為單位。
在輸入路徑上,當與 transportHeaderSize 成員搭配使用時,ipHeaderSize 會指定要從數據位移位置到 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 成員中設定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 會指定要從數據位移位置前進到傳輸標頭結尾的位元元數目。
只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_TRANSPORT_HEADER_SIZE旗標時,此成員才會包含有效的數據。
processPath
包含擁有端點之進程完整路徑 之FWP_BYTE_BLOB 結構的指標。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_PROCESS_PATH旗標時,此成員才會包含有效的數據。
token
用來驗證用戶許可權之令牌的句柄。 只有當目前MetadataValues 成員中設定FWPS_METADATA_FIELD_TOKEN旗標時,此成員才會包含有效的數據。
processId
擁有端點之進程的進程標識碼。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_PROCESS_ID旗標時,這個成員才會包含有效的數據。
sourceInterfaceIndex
接收傳入封包之網路介面的索引。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_SOURCE_INTERFACE_INDEX旗標時,此成員才會包含有效的數據。
destinationInterfaceIndex
要傳送傳出封包之網路介面的索引。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_DESTINATION_INTERFACE_INDEX旗標時,此成員才會包含有效的數據。
compartmentId
已接收或傳送封包之路由區間的標識碼。 任何修改過的封包都應該插入原始封包所指出的相同路由區間。 只有當 FWPS_METADATA_FIELD_COMPARTMENT_ID 旗標是在 currentMetadataValues 成員中設定時,這個成員才會包含有效的數據。
fragmentMetadata
描述已接收封包片段之片段數據的 FWPS_INBOUND_FRAGMENT_METADATA0 結構。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_FRAGMENT_DATA旗標時,此成員才會包含有效的數據。
pathMtu
輸出封包的路徑上限 (路徑 MTU) 。 這個值表示網路可以在沒有片段的情況下傳輸的最大實體封包大小,只有當目前MetadataValues 成員中設定FWPS_METADATA_FIELD_PATH_MTU旗標時,此成員才會包含有效的數據。
completionHandle
傳送目前篩選作業所需的完成句柄。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_COMPLETION_HANDLE旗標時,此成員才會包含有效的數據。
transportEndpointHandle
端點句柄,表示要插入輸出傳輸層的封包結尾。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_TRANSPORT_ENDPOINT_HANDLE旗標時,此成員才會包含有效的數據。
remoteScopeId
要用於輸出傳輸層插入的遠端範圍標識碼。 只有在目前MetadataValues 成員中設定FWPS_METADATA_FIELD_REMOTE_SCOPE_ID旗標時,此成員才會包含有效的數據。
controlData
選擇性的套接字控制件資料物件。 只有當FWPS_METADATA_FIELD_TRANSPORT_CONTROL_DATA 旗標 是在 currentMetadataValues 成員中設定時,這個成員才會包含有效的數據。 如需 WSACMSGHDR 類型的相關信息,請參閱 CMSGHDR。
controlDataLength
controlData 成員的長度,以位元組為單位。
packetDirection
網路流量的方向 (輸入或輸出) ,如 FWP_DIRECTION的其中一個常數值所指定。 此成員會在重新授權分類作業期間,於應用層強制執行 (ALE) 連線或接收/接受層。 如需詳細資訊,請參閱<備註>一節。
只有當目前MetadataValues 成員中設定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 | 乙太網路MacHeaderSize成員的值表示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,每個都以不同的 VM 為目標,而此散發套件的第一個 NBL 已向圖說驅動程式指出。 分散式群組的第一個 NBL 將不會設定此旗標。 群組的所有後續 NBL 都會設定此旗標。 為了插入的目的,您的圖說文字驅動程式應該複製 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
保留的。
備註
篩選引擎會將指標傳遞給圖說文字的分類Fn 圖說函式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的封包方向。
規格需求
需求 | 值 |
---|---|
標頭 | fwpsu.h |