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
引っ込み思案。 コールアウト ドライバーでは、このパラメーターを 0 に設定する必要があります。
[in] flowId
データを挿入するデータ フローを指定するランタイム識別子。 データ フローのランタイム識別子は、吹き出しドライバーの classifyFn 吹き出し関数にフィルター エンジンが提供するFWPS_METADATA_FIELD_FLOW_HANDLEメタデータ値を介して、引き出しドライバーに提供されます。
[in] calloutId
フィルター エンジンの吹き出しの実行時識別子。 この識別子は、FwpsCalloutRegister0 または FwpsCalloutRegister1 関数を 呼び出しドライバーが呼び出しをフィルター エンジンに登録するときに返されました。
[in] layerId
データ ストリームが処理されているフィルターレイヤーのランタイム識別子。 この値は、FWPS_LAYER_STREAM_V4またはFWPS_LAYER_STREAM_V6である必要があります。 データ ストリームが処理されているレイヤーのランタイム識別子は、フィルター エンジンが引き出しドライバーの classifyFn 吹き出し関数に渡した FWPS_INCOMING_VALUES0 構造の layerId メンバーの吹き出しに提供されます。
[in] streamFlags
データを挿入するデータ ストリームの特性を指定するフラグ。
受信データ ストリームにデータを挿入する場合、コールアウト ドライバーは次のフラグの 1 つ以上を指定します。
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 以降で使用できます。
送信データ ストリームにデータを挿入する場合、コールアウト ドライバーは次のフラグの 1 つ以上を指定します。
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 チェーンが記述されている場合、completionFn はチェーン内の NET_BUFFER_LIST ごとに 1 回呼び出されます。
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 コードを関数します。
リターン コード | 形容 |
---|---|
|
データ ストリームへの挿入が正常に開始されました。 フィルター エンジンは、フィルター エンジンがデータ ストリームへのデータの挿入を完了した後、NET_BUFFER_LIST 構造体が割り当てられたときに指定された完了関数を呼び出します。 |
|
TCP/IP ネットワーク スタックは、ストリーム データの挿入を受け入れる準備ができていません。 |
|
挿入ハンドルが閉じられています。 |
|
エラーが発生しました。 |
備考
コールアウト ドライバーは、コールアウトの classifyFn 吹き出し関数内から FwpsStreamInjectAsync0 関数を呼び出して、現在処理中のデータ ストリームに新しいデータまたは複製されたデータを挿入します。 コールアウト ドライバーは、ストリーム レイヤーでデータ フローを処理している場合にのみ、FwpsStreamInjectAsync0 関数を呼び出すことができます。
コールアウト ドライバーは、コールアウトの classifyFn 吹き出し関数の外部から FwpsStreamInjectAsync0 関数を呼び出して、現在遅延しているデータ ストリームにデータを挿入することもできます。 データ ストリームは、吹き出しの classifyFn 吹き出し関数が、streamAction メンバーを設定すると遅延されます。FWPS_STREAM_ACTION_DEFERする構造体を FWPS_STREAM_CALLOUT_IO_PACKET0 します。
さらに、引き出し線ドライバーは、引き出し線の classifyFn 吹き出し関数の外部から FwpsStreamInjectAsync0 関数を呼び出して、FIN 表示がペンされた後にデータ ストリームにデータを挿入できます。
または、吹き出しドライバーは、吹き出しドライバーがクローンし、帯域外処理のために示されたすべてのデータをブロックする場合、吹き出しの 分類Fn 吹き出し関数の外部の任意のスレッド コンテキストから FwpsStreamInjectAsync0 関数を呼び出すことができます。 指定されたすべてのデータを処理のためにユーザー モードにリダイレクトするコールアウト ドライバーは、この方法で FwpsStreamInjectAsync0 関数を呼び出すことができます。
吹き出しは、最初に FwpsCloneStreamData0 関数の呼び出しでデータ セグメントを複製し、その後、FWPS_CLASSIFY_OUT0 構造体の actionType メンバーにFWP_ACTION_BLOCKを設定してデータ セグメントをブロックすることで、データ セグメントをペンできます。
挿入されたストリーム データは吹き出しに再び挿入されませんが、下位サブレイヤーから吹き出しをストリーミングするために使用できるようになります。
戻り値がSTATUS_SUCCESSされていない場合、完了関数は呼び出されません。 この場合、netBufferList が指すネットワーク バッファー リストは、FwpsFreeNetBufferList0 または fwpsFreeCloneNetBufferList0 呼び出しによって解放される必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | fwpsk.h (Fwpsk.h を含む) |
ライブラリ | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |