共用方式為


FwpsInjectTransportSendAsync0 函式 (fwpsk.h)

FwpsInjectTransportSendAsync0 函式會將來自傳輸、數據報數據或 ICMP 錯誤層的封包數據插入傳送數據路徑。

注意FwpsInjectTransportSendAsync0 是 Windows Vista 和更新版本中所使用的 特定 FwpsInjectTransportSendAsync 版本。 如需詳細資訊 ,請參閱 Version-Independent 名稱和以特定 Windows 版本為目標 。 針對 Windows 7,可以使用 FwpsInjectTransportSendAsync1
 

語法

NTSTATUS FwpsInjectTransportSendAsync0(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS0 *sendArgs,
  [in]           ADDRESS_FAMILY              addressFamily,
  [in]           COMPARTMENT_ID              compartmentId,
  [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式來取得。

[in] endpointHandle

句柄,表示要插入封包之傳送數據路徑中的堆疊傳輸端點。 此端點句柄是透過的 transportEndpointHandle 成員提供給圖說文字 FWPS_INCOMING_METADATA_VALUES0 傳遞至圖說驅動程式 之 classifyFn 圖說文字函式的結構。 圖說文字驅動程式應該使用提供的句柄,儘快將複製的封包插入數據路徑,再關閉與堆棧端點相關聯的套接字,且句柄不再有效。

[in] flags

保留的。 圖說文字驅動程式必須將此參數設定為零。

[in, optional] sendArgs

的指標 FWPS_TRANSPORT_SEND_PARAMS0 結構,指定目前輸出封包的屬性。 只有在要插入的 net 緩衝區清單包含 IP 標頭 (時,才能為 NULL ,例如,如果封包是透過原始套接字傳送) 。

[in] addressFamily

下列其中一個位址系列:

AF_INET

IPv4 位址系列。

AF_INET6

IPv6 位址系列。

[in] compartmentId

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

[in, out] netBufferList

描述所插入封包數據的 NET_BUFFER_LIST 結構的指標。 圖說文字驅動程式會配置 NET_BUFFER_LIST 結構,以透過呼叫 其中一個 來插入封包數據 FwpsAllocateCloneNetBufferList0 函式或 FwpsAllocateNetBufferAndNetBufferList0 函式。

[in] completionFn

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

[in, optional] completionContext

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

傳回值

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

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

備註

圖說文字驅動程式會呼叫 FwpsInjectNetworkSendAsync0 函式,將來自傳輸、數據報數據或 ICMP 錯誤層的封包數據插入傳送數據路徑。 在這些層中,IP 標頭可能尚未形成,而且當 IPsec 原則作用中時,封包數據不會加密或簽署。 因此,此函式很適合用於啟用 IPsec 的環境中的封包檢查。

此函式可以異步執行。

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

圖說文字驅動程式通常會在修改封包數據時將數據插入網路堆疊。 如需圖說文字驅動程式如何修改封包數據的詳細資訊,請參閱 圖說文字驅動程序作業

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

插入的封包可以再次向圖說文字驅動程式表示。 若要防止無限迴圈,驅動程式應該先呼叫 FwpsQueryPacketInjectionState0 函式,再呼叫 classifyFn 圖說文字函式,並允許將插入狀態設定為FWPS_PACKET_INJECTION_STATE的封包FWPS_PACKET_INJECTED_BY_SELF或FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF

endpointHandle 參數,以及 中宣告的成員 FWPS_TRANSPORT_SEND_PARAMS0sendArgs 參數所指向的結構,會提供給來自下列網路層的圖說文字:

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
使用 FWP_DIRECTION_OUTBOUND) 指定輸出方向時FWPS_LAYER_DATAGRAM_DATA_V4 (
使用 FWP_DIRECTION_OUTBOUND) 指定輸出方向時,FWPS_LAYER_DATAGRAM_DATA_V6 (
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

如果下列兩者都成立,則數據報屬於原始套接字:

在下列網路層中,如果數據報屬於原始套接字,則必須調整 netBufferList 指向的 net 緩衝區清單,以從 IP 標頭開始, (必須前面加上 net buffer 清單) :

  • 使用 FWP_DIRECTION_OUTBOUND) 指定輸出方向時FWPS_LAYER_DATAGRAM_DATA_V4 (
  • 使用 FWP_DIRECTION_OUTBOUND) 指定輸出方向時,FWPS_LAYER_DATAGRAM_DATA_V6 (

規格需求

需求
最低支援的用戶端 從 Windows Vista 開始提供。
目標平台 Universal
標頭 fwpsk.h (包含 Fwpsk.h)
程式庫 Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

另請參閱

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FWPS_TRANSPORT_SEND_PARAMS0

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync1

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn