共用方式為


FwpsStreamInjectAsync0 函式 (fwpsk.h)

FwpsStreamInjectAsync0 函式會將 TCP 數據區段插入 TCP 數據流。

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

語法

NTSTATUS FwpsStreamInjectAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           UINT64                flowId,
  [in]           UINT32                calloutId,
  [in]           UINT16                layerId,
  [in]           UINT32                streamFlags,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           SIZE_T                dataLength,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

參數

[in] injectionHandle

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

[in, optional] injectionContext

插入內容的選擇性句柄。

[in] flags

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

[in] flowId

運行時間識別碼,指定要插入數據的數據流。 數據流的運行時間標識碼會透過篩選引擎提供給圖說驅動程序 分類Fn 圖說文字函式的FWPS_METADATA_FIELD_FLOW_HANDLE元數據值提供給圖說文字驅動程式。

[in] calloutId

篩選引擎中圖說文字的運行時間標識碼。 呼叫 FwpsCalloutRegister0FwpsCalloutRegister1 函式以向篩選引擎註冊圖說文字時,會傳回此標識碼。

[in] layerId

正在處理數據流之篩選層的運行時間標識碼。 此值必須是FWPS_LAYER_STREAM_V4或FWPS_LAYER_STREAM_V6。 正在處理數據流之圖層的運行時間標識符會提供給篩選引擎傳遞至圖說文字驅動程序分類Fn 圖說文字函式之FWPS_INCOMING_VALUES0結構之layerId 成員的圖說文字。

[in] streamFlags

指定要插入資料之數據流特性的旗標。

將資料插入輸入資料流時,圖說文字驅動程式會指定下列一或多個旗標:

FWPS_STREAM_FLAG_RECEIVE

指定資料要插入輸入資料流中。 將數據插入輸入數據流時,需要此旗標。

FWPS_STREAM_FLAG_RECEIVE_DISCONNECT

指定要在 TCP 標頭中設定 FIN 旗標,以便插入輸入數據流中的數據。

注意 如果設定此旗標,也必須設定 FWPS_STREAM_FLAG_RECEIVE 旗標,否則會傳回 STATUS_FWP_INVALID_PARAMETER
 

FWPS_STREAM_FLAG_RECEIVE_EXPEDITED

指定插入輸入數據流的數據是高優先順序、頻外數據。

FWPS_STREAM_FLAG_RECEIVE_PUSH

指定輸入數據已抵達 TCP 標頭中設定的 PUSH 旗標,這表示傳送者要求立即數據傳輸。 如果未設定此旗標,可能會發生數據傳輸的垃圾延遲。 從 Windows Vista SP1 開始,即可使用此旗標。

將資料插入輸出資料流時,圖說文字驅動程式會指定下列一或多個旗標:

FWPS_STREAM_FLAG_SEND

指定資料要插入輸出資料流中。 將數據插入輸出數據流時,需要此旗標。

FWPS_STREAM_FLAG_SEND_EXPEDITED

指定插入輸出數據流中的數據是高優先順序、頻外數據。

FWPS_STREAM_FLAG_SEND_NODELAY

指定圖說文字驅動程式要求不會緩衝插入輸出數據流中的數據。

FWPS_STREAM_FLAG_SEND_DISCONNECT

指定在將數據插入輸出數據流之後,數據流要中斷連線。 網路堆疊會在傳送的最後一個封包的 TCP 標頭中設定 FIN 旗標。

注意 如果設定此旗標,也必須設定 FWPS_STREAM_FLAG_SEND 旗標,否則會傳回 STATUS_FWP_INVALID_PARAMETER
 

[in, out] netBufferList

描述插入數據流之數據的 NET_BUFFER_LIST 結構的指標。 圖說文字驅動程式會藉由呼叫 來配置 NET_BUFFER_LIST 結構,以用於將數據插入數據流 FwpsAllocateCloneNetBufferList0FwpsAllocateNetBufferAndNetBufferList0FwpsCloneStreamData0 函式。 NET_BUFFER_LIST結構可以描述網路緩衝區清單的鏈結。 如果 streamFlags 参數FWPS_STREAM_FLAG_RECEIVE_DISCONNECTFWPS_STREAM_FLAG_SEND_DISCONNECT,netBufferList 可以是 NULL

[in] dataLength

插入數據流的數據位元組數目。

[in] completionFn

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

如果 netBufferList 參數描述NET_BUFFER_LIST鏈結,則鏈結中的每個NET_BUFFER_LIST都會呼叫 completionFn 一次。

如果 netBufferList 參數為 NULL ,且 streamFlags 參數已 設定FWPS_STREAM_FLAG_RECEIVE_DISCONNECTFWPS_STREAM_FLAG_SEND_DISCONNECT ,則不會呼叫 completionFn 函式。

這個參數是必要的,而且不能是 NULL。 如果是 NULL,則會傳回 STATUS_FWP_NULL_POINTER

[in, optional] completionContext

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

傳回值

FwpsStreamInjectAsync0 會函式 NTSTATUS 程式代碼,例如下列其中一項。

傳回碼 Description
STATUS_SUCCESS
已成功初始化數據流中的插入。 篩選引擎會在篩選引擎完成將數據插入數據流之後,呼叫在配置 NET_BUFFER_LIST 結構時所指定的完成函式。
STATUS_FWP_TCPIP_NOT_READY
TCP/IP 網路堆疊尚未準備好接受串流數據的插入。
STATUS_FWP_INJECT_HANDLE_CLOSING
插入句柄正在關閉。
其他狀態代碼
發生錯誤。

備註

圖說文字驅動程式會從圖說文字的 classifyFn 圖說文字函式內呼叫 FwpsStreamInjectAsync0 函式,以將新的或複製的數據插入目前正在處理的數據流中。 圖說文字驅動程式只能在串流層處理數據流時呼叫 FwpsStreamInjectAsync0 函式。

圖說文字驅動程式也可以從圖說文字的 classifyFn 圖說文字函式外部呼叫 FwpsStreamInjectAsync0 函式,將數據插入目前延遲的數據流。 當圖說文字的 classifyFn 圖說文字函式設定 的 streamAction 成員時,數據流會延遲 FWPS_STREAM_ACTION_DEFER的 FWPS_STREAM_CALLOUT_IO_PACKET0 結構。

此外,圖說文字驅動程式可以從圖說文字的 classifyFn 圖說函式外部呼叫 FwpsStreamInjectAsync0 函式,在 FIN 指示傳送之後將數據插入數據流中。

或者,如果圖說文字驅動程式複製並封鎖針對頻外處理所指示的所有數據,則圖說文字驅動程式可以從圖說文字的 categoryFn 圖說文字函式以外的任意線程內容呼叫 FwpsStreamInjectAsync0 函式。 將所有指示數據重新導向至使用者模式以進行處理的圖說文字驅動程式,可以透過這種方式呼叫 FwpsStreamInjectAsync0 函式。

圖說文字可以先透過 FwpsCloneStreamData0 函式的呼叫來複製數據區段,然後藉由在 FWPS_CLASSIFY_OUT0 結構的 actionType 成員中設定FWP_ACTION_BLOCK來封鎖數據區段。

插入的數據流數據不會重新初始化至圖說文字,但會從較低權數子圖層串流圖說文字。

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

規格需求

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

另請參閱

FWPS_INCOMING_VALUES0

FWPS_STREAM_CALLOUT_IO_PACKET0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsCalloutRegister0

FwpsCalloutRegister1

FwpsCloneStreamData0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

classifyFn

completionFn