共用方式為


FwpsInjectNetworkReceiveAsync0 函式 (fwpsk.h)

FwpsInjectNetworkReceiveAsync0 函式會將封包數據插入接收數據路徑。

注意FwpsInjectNetworkReceiveAsync0 是特定版本的 FwpsInjectNetworkReceiveAsync。 如需詳細資訊 ,請參閱 Version-Independent 名稱和以特定版本的 Windows 為目標
 

語法

NTSTATUS FwpsInjectNetworkReceiveAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [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 函式呼叫所建立的插入句柄, 並將 flags 參數設定為 FWPS_INJECTION_TYPE_NETWORK。

[in, optional] injectionContext

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

[in] flags

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

[in] compartmentId

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

[in] interfaceIndex

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

[in] subInterfaceIndex

接收原始封包數據的子介面索引。 圖說文字驅動程式應該使用子介面索引的值,當做其中一個傳入數據值傳遞至此參數的 classFn 圖說文字函式,如果封包要插入至原始封包所指出的相同子介面中。

[in, out] netBufferList

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

[in] completionFn

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

[in, optional] completionContext

圖說文字驅動程式提供的指標,傳遞至 completionFn 參數所指向的圖說文字函式。 此參數是選擇性的,可以是 NULL

傳回值

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

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

備註

圖說文字驅動程式會呼叫 FwpsInjectNetworkReceiveAsync0 函式,將封包數據或封包片段插入接收數據路徑。 此函式可以異步執行。 修改封包數據時,圖說文字驅動程式通常會將數據插入網路堆疊。 如需圖說文字驅動程式如何修改封包數據的詳細資訊,請參閱 圖說文字驅動程序作業

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

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

規格需求

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

另請參閱

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn