次の方法で共有


FwpsInjectForwardAsync0 関数 (fwpsk.h)

FwpsInjectForwardAsync0 関数は、転送データ パスにパケット データを挿入します。

FwpsInjectForwardAsync0 は、 FwpsInjectForwardAsync の特定のバージョンです。 詳細については、「 WFP Version-Independent 名と特定のバージョンの Windows を対象 とする」を参照してください。
 

構文

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

挿入コンテキストへの省略可能なハンドル。 指定した場合は、 を呼び出すことで取得できます。 FwpsQueryPacketInjectionState0 関数は、パケット インジェクション状態 FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF またはFWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF場合に機能 します

[in] flags

予約済み。 コールアウト ドライバーでは、このパラメーターを 0 に設定する必要があります。

[in] addressFamily

次のいずれかのアドレス ファミリ:

AF_INET

IPv4 アドレス ファミリ。

AF_INET6

IPv6 アドレス ファミリ。

[in] compartmentId

パケット データが挿入されるルーティング コンパートメントの識別子。 COMPARTMENT_ID 型として指定されます。 この識別子は、 の compartmentId メンバーを介して吹き出しに提供されます。 FWPS_INCOMING_METADATA_VALUES0 吹き出しドライバーの classifyFn 吹き出し関数に渡される構造体です。 引き出し線で compartmentId メンバーを使用できる場合、 FWPS_METADATA_FIELD_COMPARTMENT_IDは currentMetadataValues メンバーに設定されます。 それ以外の場合は、このパラメーターを UNSPECIFIED_COMPARTMENT_ID に設定します。

[in] interfaceIndex

宛先インターフェイスのインデックス (パケット データの送信先)。 インデックスは 32 ビット値です。 コールアウト ドライバーは、元のパケットが示されたのと同じインターフェイスにパケットを挿入する場合は、このパラメーターの classifyFn 吹き出し関数に受信データ値の 1 つとして渡されるインターフェイス インデックスの値を使用する必要があります。

[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 コードを返します。

リターン コード 説明
STATUS_SUCCESS
パケット データの挿入が正常に開始されました。 フィルター エンジンは、フィルター エンジンがネットワーク スタックへのパケット データの挿入を完了した後、またはエラーが発生した後に完了関数を呼び出します。その場合、完了したNET_BUFFER_LIST構造体の Status メンバーはエラーの理由を示します。
STATUS_FWP_TCPIP_NOT_READY
TCP/IP ネットワーク スタックは、パケット データの挿入を受け入れる準備ができていません。
STATUS_FWP_INJECT_HANDLE_CLOSING
インジェクション ハンドルが閉じられています。
その他の状態コード
エラーが発生しました。

解説

コールアウト ドライバーは FwpsInjectForwardAsync0 関数を呼び出して、パケット データまたはパケット フラグメントを転送データ パスに挿入します。

この関数は非同期的に実行できます。 コールアウト ドライバーは、通常、パケット データを変更するときに、ネットワーク スタックにデータを挿入します。 コールアウト ドライバーがパケット データを変更する方法の詳細については、「 コールアウト ドライバーの操作」を参照してください。

この関数で挿入されたパケットまたはパケット フラグメントは、フィルター処理のために WFP レイヤーに示されません。

戻り値がSTATUS_SUCCESSされていない場合、完了関数は呼び出されません。 この場合、 netBufferList が指す net バッファー リストは 、FwpsFreeNetBufferList0 または への呼び出しによって解放される必要があります。 FwpsFreeCloneNetBufferList0

IP パケットまたはフラグメントは、複製、変更、およびネットワーク スタックへの挿入が可能です。 ただし、フラグメント グループを再取り付けする前に、コールアウト ドライバーによって 1 つのNET_BUFFER_LISTとして再構成する必要があります。

前方挿入されたパケットは、転送レイヤーに再入力されません。 したがって、再分類されません。

要件

要件
サポートされている最小のクライアント Windows Vista 以降で使用できます。
対象プラットフォーム ユニバーサル
Header fwpsk.h (Fwpsk.h を含む)
Library Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

FWPS_INCOMING_METADATA_VALUES0 FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDestroy0

NET_BUFFER_LIST

パケット挿入関数

classifyFn

completionFn