FwpsInjectTransportSendAsync1 関数 (fwpsk.h)
FwpsInjectTransportSendAsync1 関数は、トランスポート、データグラム データ、または ICMP エラー 層からのパケット データを送信データ パスに挿入します。 この関数は、更新されたパラメーター構造を引数として受け取る点で、前のバージョン (FwpsInjectTransportSendAsync0) とは異なります。
構文
NTSTATUS FwpsInjectTransportSendAsync1(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT64 endpointHandle,
[in] UINT32 flags,
[in, optional] FWPS_TRANSPORT_SEND_PARAMS1 *sendArgs,
[in] ADDRESS_FAMILY addressFamily,
[in] COMPARTMENT_ID compartmentId,
[in, out] NET_BUFFER_LIST *netBufferList,
[in] FWPS_INJECT_COMPLETE0 completionFn,
[in, optional] HANDLE completionContext
);
パラメーター
[in] injectionHandle
への呼び出しによって以前に作成されたインジェクション ハンドルFwpsInjectionHandleCreate0 関数を します。
[in, optional] injectionContext
挿入コンテキストへの省略可能なハンドル。 指定した場合は、パケット挿入状態が FWPS_PACKET_INJECTED_BY_SELF または FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELFのときに、FwpsQueryPacketInjectionState0 FWPS_PACKET_INJECTION_STATE 関数を呼び出すことによって取得できます。
[in] endpointHandle
パケットが挿入される送信データ パス内のスタック トランスポート エンドポイントを示すハンドル。 このエンドポイント ハンドルは、transportEndpointHandle メンバーを介して吹き出しに提供されます。吹き出しドライバーの classifyFn 吹き出し関数に渡される FWPS_INCOMING_METADATA_VALUES0 構造体。 コールアウト ドライバーでは、スタック エンドポイントに関連付けられているソケットが閉じられ、ハンドルが無効になる前に、指定されたハンドルを使用して、複製されたパケットをできるだけ早くデータ パスに挿入する必要があります。
[in] flags
このパラメーターは予約されています。 コールアウト ドライバーでは、このパラメーターを 0 に設定する必要があります。
[in, optional] sendArgs
へのポインター FWPS_TRANSPORT_SEND_PARAMS1 現在の送信パケットのプロパティを指定する構造体です。 このパラメーターは、挿入するネット バッファー リストに IP ヘッダーが含まれている場合 (たとえば、パケットが生のソケットを介して送信される場合) にのみ、NULL を できます。
[in] addressFamily
次のいずれかのアドレス ファミリ:
AF_INET
IPv4 アドレス ファミリ。
AF_INET6
IPv6 アドレス ファミリ。
[in] compartmentId
パケット データが挿入されるルーティング コンパートメントの識別子。COMPARTMENT_ID 型として指定されます。 この識別子は、の compartmentId メンバーを介して吹き出しに提供されます。吹き出しドライバーの classifyFn 吹き出し関数に渡される FWPS_INCOMING_METADATA_VALUES0 構造体。 の compartmentId メンバーが吹き出しで使用できる場合、FWPS_METADATA_FIELD_COMPARTMENT_IDは currentMetadataValues メンバーに設定されます。 それ以外の場合は、このパラメーターを UNSPECIFIED_COMPARTMENT_ID に設定します。
[in, out] netBufferList
挿入されるパケット データを記述する NET_BUFFER_LIST 構造体へのポインター。 コールアウト ドライバーは、パケット データを挿入するために使用する NET_BUFFER_LIST 構造体を割り当てます。 FwpsAllocateCloneNetBufferList0 関数またはFwpsAllocateNetBufferAndNetBufferList0 関数を します。
[in] completionFn
completionFn 引き出しドライバーによって提供される吹き出し関数へのポインター。 フィルター エンジンは、netBufferList パラメーターによって記述されたパケット データがネットワーク スタックに挿入された後に、この関数を呼び出します。
[in, optional] completionContext
completionFn パラメーターが指す引き出し関数に渡される、引き出しドライバーが提供するコンテキストへのポインター。 このパラメーターは省略可能であり、NULL できます。
戻り値
FwpsInjectTransportSendAsync1 関数は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 形容 |
---|---|
|
パケット データの挿入が正常に開始されました。 フィルター エンジンは、フィルター エンジンがネットワーク スタックへのパケット データの挿入を完了した後、またはエラーが発生した後に完了関数を呼び出します。 エラーが発生した場合、完了した NET_BUFFER_LIST 構造体の Status メンバーは、失敗の理由を示します。 |
|
TCP/IP ネットワーク スタックは、パケット データの挿入を受け入れる準備ができていません。 |
|
挿入ハンドルが閉じられています。 |
|
エラーが発生しました。 |
備考
コールアウト ドライバーは、FwpsInjectTransportSendAsync1 関数を呼び出して、トランスポート、データグラム データ、または ICMP エラー 層から送信データ パスにパケット データを挿入します。 これらのレイヤーでは、IP ヘッダーがまだ形成されていない可能性があり、IPsec ポリシーがアクティブな場合、パケット データは暗号化も署名もされません。 したがって、この関数は、IPsec 対応環境でのパケット検査に最適です。
この関数は非同期的に実行できます。
戻り値が STATUS_SUCCESSされていない場合、完了関数は呼び出されません。 この場合、netBufferList が指す net バッファー リストは、fwpsFreeNetBufferList0 または fwpsFreeCloneNetBufferList0 呼び出しによって解放される必要があります。
コールアウト ドライバーは通常、パケット データを変更するときにネットワーク スタックにデータを挿入します。 吹き出しドライバーがパケット データを変更する方法の詳細については、「コールアウト ドライバー操作 を参照してください。
挿入されたパケットは、コールアウト ドライバーにもう一度示すことができます。 無限ループを防ぐために、ドライバーは最初に FwpsQueryPacketInjectionState0 関数は、classifyFn 吹き出し関数を呼び出す前に、FWPS_PACKET_INJECTED_BY_SELF または FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELFに設定 FWPS_PACKET_INJECTION_STATE インジェクション状態のパケットを許可します。
endpointHandle パラメーターと、/> で宣言されたメンバー
sendArgs パラメーターが指す FWPS_TRANSPORT_SEND_PARAMS1 構造は、次のネットワーク レイヤーの吹き出しに提供されます。
- FWPS_LAYER_OUTBOUND_TRANSPORT_V4
- FWPS_LAYER_OUTBOUND_TRANSPORT_V6
- FWPS_LAYER_DATAGRAM_DATA_V4 (送信方向が FWP_DIRECTION_OUTBOUND で指定されている場合)
- FWPS_LAYER_DATAGRAM_DATA_V6 (送信方向が FWP_DIRECTION_OUTBOUND で指定されている場合)
- FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
- FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6
次の両方が当てはまる場合、データグラムは生ソケットに属します。
- FWPS_INCOMING_METADATA_VALUES0 構造体の currentMetadataValues メンバーには、FWPS_METADATA_FIELD_IP_HEADER_SIZE フラグが設定されています。
- FWPS_INCOMING_METADATA_VALUES0 構造体の ipHeaderSize メンバーが 0 より大きい。
次のネットワーク レイヤーで、データグラムが生ソケットに属している場合は、headerIncludeHeader と headerIncludeHeaderLengthFWPS_INCOMING_METADATA_VALUES0 構造体のメンバーを、sendArgs パラメーターが指す FWPS_TRANSPORT_SEND_PARAMS1 構造体の対応するメンバーにコピーする必要があります。
- FWPS_LAYER_DATAGRAM_DATA_V4 (送信方向が FWP_DIRECTION_OUTBOUND で指定されている場合)
- FWPS_LAYER_DATAGRAM_DATA_V6 (送信方向が FWP_DIRECTION_OUTBOUND で指定されている場合)
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 7 以降で使用できます。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | fwpsk.h (Fwpsk.h を含む) |
ライブラリ | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |
関連項目
FWPS_INCOMING_METADATA_VALUES0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0FwpsInjectTransportSendAsync0 を する
FwpsQueryPacketInjectionState0