共用方式為


FwpsInjectTransportReceiveAsync0 函式 (fwpsk.h)

FwpsInjectTransportReceiveAsync0 函式會將封包數據從傳輸、數據報數據或 ICMP 錯誤層插入接收數據路徑。

附注FwpsInjectTransportReceiveAsync0 是 FwpsInjectTransportReceiveAsync 的特定版本。 如需詳細資訊,請參閱 糧食計劃署 Version-Independent 名稱和以特定版本的 Windows 為目標。
 

語法

NTSTATUS FwpsInjectTransportReceiveAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
                 PVOID                 reserved,
  [in]           UINT32                flags,
  [in]           ADDRESS_FAMILY        addressFamily,
  [in]           COMPARTMENT_ID        compartmentId,
  [in]           IF_INDEX              interfaceIndex,
  [in]           IF_INDEX              subInterfaceIndex,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

參數

[in] injectionHandle

先前由呼叫 所建立的插入句柄 FwpsInjectionHandleCreate0 函式。

[in, optional] injectionContext

插入內容的選擇性句柄。 如果指定,可以在封包插入 FWPS_PACKET_INJECTION_STATE 狀態 FWPS_PACKET_INJECTED_BY_SELFFWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF時呼叫 FwpsQueryPacketInjectionState0 函式來取得。

reserved

保留。 註標驅動程式必須將此參數設定為零。

[in] flags

保留。 註標驅動程式必須將此參數設定為零。

[in] addressFamily

下列其中一個位址系列:

AF_INET

IPv4 位址系列。

AF_INET6

IPv6 位址系列。

[in] compartmentId

將封包數據插入路由區間的標識碼,指定為 COMPARTMENT_ID 類型。 此標識子會透過 compartmentId 成員提供給圖說文字傳遞至圖說文字驅動程式 分類Fn 圖說函式的 FWPS_INCOMING_METADATA_VALUES0 結構。 如果 間隔標識碼 成員可供圖說文字使用,FWPS_METADATA_FIELD_COMPARTMENT_ID 將會在 currentMetadataValues 成員中設定。 否則,請將此參數設定為 UNSPECIFIED_COMPARTMENT_ID

[in] interfaceIndex

接收原始封包數據的介面索引。 如果封包要插入原始封包的相同介面,則圖說驅動程序應該使用介面索引的值,這個值會當做其中一個傳入數據值傳遞給其 分類Fn 圖說文字函式。

[in] subInterfaceIndex

接收原始封包數據之子介面的索引。 如果封包要插入原始封包的相同子介面,則圖說驅動程式應該使用作為其中一個傳入數據值傳遞至其 分類Fn 註標函式的子介面索引值。

[in, out] netBufferList

描述所插入封包數據的 NET_BUFFER_LIST 結構的指標。 圖說驅動程式會藉由呼叫 FwpsAllocateCloneNetBufferList0 函式或 FwpsAllocateNetBufferAndNetBufferList0 函式,來配置 NET_BUFFER_LIST 結構來插入封包數據。 NET_BUFFER_LIST 結構必須以IP標頭開頭。

[in] completionFn

completionFn 的指標, 圖說驅動程式所提供的圖說文字函式。 篩選引擎會在封包數據之後呼叫此函式,如 netBufferList 參數所描述的封包數據已插入網路堆棧中。

[in, optional] completionContext

completionFn 參數所指向之圖說文字函式的圖說文字驅動程式提供內容指標。 這個參數是選擇性的,而且可以 NULL

傳回值

FwpsInjectTransportReceiveAsync0 函式會傳回下列其中一個 NTSTATUS 碼。

傳回碼 描述
STATUS_SUCCESS
已成功起始封包數據插入。 篩選引擎會在篩選引擎完成將封包數據插入網路堆疊之後,或後續發生錯誤時呼叫完成函式。 如果發生錯誤,已完成 NET_BUFFER_LIST 結構 狀態 成員將會指出失敗的原因。
STATUS_FWP_TCPIP_NOT_READY
TCP/IP 網路堆疊尚未準備好接受封包數據的插入。
STATUS_FWP_INJECT_HANDLE_CLOSING
插入句柄正在關閉。
其他狀態代碼
發生錯誤。

言論

圖說驅動程式會呼叫 FwpsInjectTransportReceiveAsync0 函式,將封包數據從傳輸、數據報數據或 ICMP 錯誤層插入接收數據路徑。 此函式可以異步執行。 圖說文字驅動程式通常會在修改封包數據時將數據插入網路堆疊。 如需圖說文字驅動程式如何修改封包資料的詳細資訊,請參閱 圖說文字驅動程式作業

如果圖說驅動程式修改了會插入 FwpsInjectTransportReceiveAsync0的封包,則應該呼叫 FwpsConstructIpHeaderForTransportPacket0 函式,以更正 IP 和上層通訊協定 (TCP、UDP 和 ICMP) 總和檢查碼。 FwpsConstructIpHeaderForTransportPacket0headerIncludeHeaderSize 參數應該與 ipHeaderSize 成員的值相同 FWPS_INCOMING_METADATA_VALUES0 結構,該結構會傳遞至圖說 inMetaValues 參數的圖說驅動程式 classifyFn 圖說文字函式。

如果未 STATUS_SUCCESS傳回值,則不會呼叫完成函式。 在此情況下,netBufferList 所指向的 net 緩衝區清單 必須透過呼叫 FwpsFreeNetBufferList0 FwpsFreeCloneNetBufferList0

如果原始輸入封包數據在最初由傳輸層處理時受到IPsec原則強制執行,則此函式所插入的複製封包會在重新進入網路堆疊時略過IPsec驗證。 使用 FwpsAllocateNetBufferAndNetBufferList0 函式的本機產生的輸入封包也會略過 IPsec 驗證。

若要讓 IPsec 先處理輸入封包,檢查傳輸層數據的圖說文字必須比通用子圖層結構中的 FWPS_FILTER0 subLayerWeight 值低。 此外,圖說驅動程式不得攔截組合的通道模式封包 FWPS_PACKET_LIST_INBOUND_IPSEC_INFORMATION0 成員 (isTunnelMode &&! isDeTunneled] 是由 傳回。 FwpsGetPacketListSecurityInformation0 函式。 圖說文字驅動程式必須等候封包被解通,然後應該在傳輸層或正向層攔截它。

由於 TCP 通訊協議鎖定語意,TCP 只能在任何傳輸層或對等層插入頻外,因此 FwpsInjectTransportReceiveAsync0 和 FwpsInjectTransportSendAsync0 必須由 DPC 排入佇列並執行。

如果未設定 FWPS_METADATA_FIELD_ALE_CLASSIFY_REQUIRED 元數據旗標,可以從下列其中一個傳輸層呼叫此函式:

FWPS_LAYER_INBOUND_TRANSPORT_V4

FWPS_LAYER_INBOUND_TRANSPORT_V6

FWPS_LAYER_DATAGRAM_DATA_V4 (以 FWP_DIRECTION_INBOUND指定輸入方向時)

FWPS_LAYER_DATAGRAM_DATA_V6 (以 FWP_DIRECTION_INBOUND指定輸入方向時)

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

否則,在呼叫 FwpsPendOperation0 的 FwpsPendOperation0 之後,應該從下列應用層強制 #ALE 層呼叫此函式,並且已呼叫 FwpsCompleteOperation0

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V4

FWPS_LAYER_ALE_AUTH_RECV_ACCEPT_V6

要插入的 net 緩衝區清單必須傳遞至 FwpsCompleteOperation0 函式作為 netBufferList 自變數

插入的封包可以再次向圖說驅動程式表示。 若要防止無限迴圈,驅動程式應該先呼叫 FwpsQueryPacketInjectionState0 函式,然後再繼續呼叫 classifyFn 圖說文字函式,而驅動程式應該允許將插入 FWPS_PACKET_INJECTION_STATE 狀態設定為 FWPS_PACKET_INJECTED_BY_SELFFWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF 的封包通過未變更。

要求

要求 價值
最低支援的用戶端 從 Windows Vista 開始提供。
目標平臺 普遍
標頭 fwpsk.h (包括 Fwpsk.h)
連結庫 Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

另請參閱

FWPS_FILTER0

FWPS_FILTER_CONDITION0

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_PACKET_LIST_INBOUND_IPSEC_INFORMATION0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCompleteOperation0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsGetPacketListSecurityInformation0

FwpsInjectNetworkSendAsync0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsPendOperation0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

分類Fn

完成Fn