FwpsInjectionHandleCreate0 関数 (fwpsk.h)
FwpsInjectionHandleCreate0 関数は、パケットインジェクション関数が TCP/IP ネットワーク スタックにパケットまたはストリーム データを挿入し、FwpsQueryPacketInjectionState0 関数でパケットインジェクション状態を照会するために使用できるハンドルを作成します。
構文
NTSTATUS FwpsInjectionHandleCreate0(
[in, optional] ADDRESS_FAMILY addressFamily,
[in] UINT32 flags,
[out] HANDLE *injectionHandle
);
パラメーター
[in, optional] addressFamily
挿入ハンドルが作成されるアドレス ファミリ。 これには、次のいずれかのアドレス ファミリを指定できます。
AF_UNSPEC
アドレス ファミリが指定されていません。
AF_INET
IPv4 アドレス ファミリ。
AF_INET6
IPv6 アドレス ファミリ。
トランスポート、ストリーム、および前方挿入の場合、このパラメーターは省略可能であり、指定されていないアドレス ファミリを示すAF_UNSPECに設定できます。 この値は Ws2def.h で定義されています。
[in] flags
挿入するデータの種類を示すためにコールアウト ドライバーによって設定されるフラグ値。 このフラグには、次の 1 つ以上の値を指定できます。
FWPS_INJECTION_TYPE_FORWARD
パケット データは、 を呼び出すことによって挿入されます。 FwpsInjectForwardAsync0 関数。
FWPS_INJECTION_TYPE_NETWORK
ネットワーク データは、次のいずれかを呼び出すことによって挿入されます。 FwpsInjectNetworkReceiveAsync0 関数または FwpsInjectNetworkSendAsync0 関数。
FWPS_INJECTION_TYPE_STREAM
Streamデータは、 を呼び出すことによって挿入されます。 FwpsStreamInjectAsync0 関数。
FWPS_INJECTION_TYPE_TRANSPORT
トランスポート データは、次のいずれかを呼び出すことによって挿入されます。 FwpsInjectTransportReceiveAsync0 関数または FwpsInjectTransportSendAsync0 関数。
複数の挿入関数で使用されるインジェクション ハンドルを作成するには、インジェクションの種類のビットをビットごとの OR 演算と組み合わせます。 フラグ値が 0 に設定されている場合、結果のインジェクション ハンドルをトランスポート、ストリーム、および前方挿入に使用できます。
[out] injectionHandle
ハンドルを受け取る変数へのポインター。
戻り値
FwpsInjectionHandleCreate0 関数は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
インジェクション ハンドルが正常に作成されました。 |
|
TCP/IP ネットワーク スタックの準備ができていません。 コールアウト ドライバーは、後で FwpsInjectionHandleCreate0 関数を再度呼び出して、インジェクション ハンドルを作成する必要があります。 |
|
エラーが発生しました。 |
解説
コールアウト ドライバーは FwpsInjectionHandleCreate0 関数を呼び出して、パケットまたはストリーム データを TCP/IP ネットワーク スタックに挿入し、パケットインジェクション状態を照会するために使用できるハンドルを作成します。 コールアウト ドライバーは、作成されたハンドルを パケット インジェクション関数 に渡し、 FwpsQueryPacketInjectionState0。
吹き出しドライバーは、インジェクション ハンドルの使用が完了した後、 FwpsInjectionHandleDestroy0 関数を呼び出してハンドルを破棄する必要があります。 保留中のインジェクションがまだ完了していない場合、この関数は完了するまで待ってから戻ります。
ネットワーク 層に対してインジェクションが行われ、IPv4 アドレス ファミリと IPv6 アドレス ファミリの両方がフィルター処理されている場合、引き出しドライバーは 、FwpsInjectionHandleCreate0 関数を 2 回呼び出して 2 つのインジェクション ハンドルを作成する必要があります。 addressFamily を AF_INET に設定した呼び出しと、 addressFamily を AF_INET6 に設定した 2 回目の呼び出しです。
MAC レイヤー (*MAC_FRAME_NATIVE、*MAC_FRAME_ETHERNET、*VSWITCH_ETHERNET) では、FWPS_INJECTION_TYPE_L2 フラグで取得したのと同じインジェクション ハンドルを使用できます。 インジェクション タイプは、レイヤーよりも射出関数に近い位置に関連付けられます。
コード例については、「 WFPSampler HelperFunctions_InjectionData.cpp」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | fwpsk.h (Fwpsk.h を含む) |
Library | Fwpkclnt.lib |
IRQL | PASSIVE_LEVEL |