FwpsStreamInjectAsync0 函式 (fwpsk.h)
FwpsStreamInjectAsync0 函式會將 TCP 數據區段插入 TCP 數據流。
語法
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
篩選引擎中圖說文字的運行時間標識碼。 呼叫 FwpsCalloutRegister0 或 FwpsCalloutRegister1 函式以向篩選引擎註冊圖說文字時,會傳回此標識碼。
[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_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 旗標。
[in, out] netBufferList
描述插入數據流之數據的 NET_BUFFER_LIST 結構的指標。 圖說文字驅動程式會藉由呼叫 來配置 NET_BUFFER_LIST 結構,以用於將數據插入數據流 FwpsAllocateCloneNetBufferList0、 FwpsAllocateNetBufferAndNetBufferList0 或 FwpsCloneStreamData0 函式。 NET_BUFFER_LIST結構可以描述網路緩衝區清單的鏈結。 如果 streamFlags 参數FWPS_STREAM_FLAG_RECEIVE_DISCONNECT或FWPS_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_DISCONNECT 或 FWPS_STREAM_FLAG_SEND_DISCONNECT ,則不會呼叫 completionFn 函式。
這個參數是必要的,而且不能是 NULL。 如果是 NULL,則會傳回 STATUS_FWP_NULL_POINTER 。
[in, optional] completionContext
圖說文字驅動程式提供的指標,傳遞至 completionFn 參數所指向的圖說文字函式。 此參數是選擇性的,可以是 NULL。
傳回值
FwpsStreamInjectAsync0 會函式 NTSTATUS 程式代碼,例如下列其中一項。
傳回碼 | Description |
---|---|
|
已成功初始化數據流中的插入。 篩選引擎會在篩選引擎完成將數據插入數據流之後,呼叫在配置 NET_BUFFER_LIST 結構時所指定的完成函式。 |
|
TCP/IP 網路堆疊尚未準備好接受串流數據的插入。 |
|
插入句柄正在關閉。 |
|
發生錯誤。 |
備註
圖說文字驅動程式會從圖說文字的 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 所指向的網路緩衝區清單必須透過 呼叫 FwpsFreeNetBufferList0 或 FwpsFreeCloneNetBufferList0 釋放。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows Vista 開始提供。 |
目標平台 | Universal |
標頭 | fwpsk.h (包含 Fwpsk.h) |
程式庫 | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |