FwpsInjectForwardAsync0 函式 (fwpsk.h)
FwpsInjectForwardAsync0 函式會將封包數據插入轉送數據路徑。
語法
NTSTATUS FwpsInjectForwardAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[in] ADDRESS_FAMILY addressFamily,
[in] COMPARTMENT_ID compartmentId,
[in] IF_INDEX interfaceIndex,
[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_SELF 或 FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF時, FwpsQueryPacketInjectionState0 函式。
[in] flags
保留。 註標驅動程式必須將此參數設定為零。
[in] addressFamily
下列其中一個位址系列:
AF_INET
IPv4 位址系列。
AF_INET6
IPv6 位址系列。
[in] compartmentId
將封包數據插入路由區間的標識碼,指定為 COMPARTMENT_ID 類型。 此標識子會透過 compartmentId 成員提供給圖說文字傳遞至圖說文字驅動程式 分類Fn 圖說函式的 FWPS_INCOMING_METADATA_VALUES0 結構。 如果圖說文字可以使用 compartmentId 成員,FWPS_METADATA_FIELD_COMPARTMENT_ID將會在 currentMetadataValues 成員 中設定。 否則,請將此參數設定為 UNSPECIFIED_COMPARTMENT_ID。
[in] interfaceIndex
目的地介面的索引(要傳送封包數據的索引)。 索引是32位值。 如果封包要插入原始封包的相同介面,則圖說驅動程序應該使用介面索引的值,這個值會當做其中一個傳入數據值傳遞給其 分類Fn 圖說文字函式。
[in, out] netBufferList
描述所插入封包數據的 NET_BUFFER_LIST 結構的指標。 圖說驅動程式會藉由呼叫 任一呼叫 來配置NET_BUFFER_LIST結構來插入封包數據 FwpsAllocateCloneNetBufferList0 函式或 FwpsAllocateNetBufferAndNetBufferList0 函式。 NET_BUFFER_LIST 結構必須以IP標頭開頭。
[in] completionFn
completionFn 的指標, 圖說驅動程式所提供的圖說文字函式。 篩選引擎會在封包數據之後呼叫此函式,如 netBufferList 參數所描述的封包數據已插入網路堆棧中。
[in, optional] completionContext
由註標驅動程式提供之內容的指標,傳遞至由 completionFn 參數所指向的圖說文字函式。 這個參數是選擇性的,而且可以 NULL。
傳回值
FwpsInjectForwardAsync0 函式會傳回下列其中一個 NTSTATUS 程式代碼。
傳回碼 | 描述 |
---|---|
|
已成功起始封包數據插入。 篩選引擎會在篩選引擎完成將封包數據插入網路堆疊之後呼叫完成函式,或在後續發生錯誤時呼叫完成函式,在此情況下,完成 NET_BUFFER_LIST 結構 成員 狀態會指出失敗的原因。 |
|
TCP/IP 網路堆疊尚未準備好接受封包數據的插入。 |
|
插入句柄正在關閉。 |
|
發生錯誤。 |
言論
圖說驅動程式會呼叫 FwpsInjectForwardAsync0 函式,將封包數據或封包片段插入轉送數據路徑。
此函式可以異步執行。 圖說文字驅動程式通常會在修改封包數據時將數據插入網路堆疊。 如需圖說文字驅動程式如何修改封包資料的詳細資訊,請參閱 圖說文字驅動程式作業。
插入此函式的封包或封包片段不會向任何 WFP 層表示篩選。
如果未STATUS_SUCCESS傳回值,則不會呼叫完成函式。 在此情況下,netBufferList 所指向的 net 緩衝區清單 必須透過呼叫 FwpsFreeNetBufferList0 或 FwpsFreeCloneNetBufferList0。
IP 封包或片段可以複製、修改和插入回網路堆疊。 不過,圖說文字驅動程式必須將片段群組重新組合為單一NET_BUFFER_LIST,才能重新檢視。
轉送插入的封包不會重新進入轉送層。 因此,它們不會重新分類。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows Vista 開始提供。 |
目標平臺 | 普遍 |
標頭 | fwpsk.h (包括 Fwpsk.h) |
連結庫 | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |