次の方法で共有


FwpsInjectMacSendAsync0 関数 (fwpsk.h)

FwpsInjectMacSendAsync0 関数は、以前に吸収されたメディア アクセス制御 (MAC) フレーム (またはフレームの複製) を、インターセプトされたレイヤー 2 の送信データ パスに再結合したり、発明された MAC フレームを挿入したりできます。

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

 

構文

NTSTATUS FwpsInjectMacSendAsync0(
  [in]           HANDLE               injectionHandle,
  [in, optional] HANDLE               injectionContext,
  [in]           UINT32               flags,
  [in]           UINT16               layerId,
  [in]           IF_INDEX             interfaceIndex,
  [in]           NDIS_PORT_NUMBER     NdisPortNumber,
  [in, out]      NET_BUFFER_LIST      *netBufferLists,
  [in]           FWPS_INJECT_COMPLETE completionFn,
  [in, optional] HANDLE               completionContext
);

パラメーター

[in] injectionHandle

flags パラメーターが FWPS_INJECTION_TYPE_L2 に設定された FwpsInjectionHandleCreate0 関数の呼び出しによって以前に取得されたインジェクション ハンドル。

メモFwpsInjectionHandleCreate0 関数の addressFamily パラメーターをAF_UNSPECに設定します。
 

[in, optional] injectionContext

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

[in] flags

予約済み。 0 に設定する必要があります。

[in] layerId

データ ストリームが処理されるフィルターレイヤーのランタイム識別子。

[in] interfaceIndex

コールアウト ドライバーの classifyFn 受信値に渡されるインターフェイス インデックスFWPS_FIELD_XxxMAC_FRAMEXxx_INTERFACE_INDEX。

[in] NdisPortNumber

引き出しドライバーの classifyFn 受信値に渡される NDIS ポート番号FWPS_FIELD_XxxMAC_FRAMEXxx_NDIS_PORT。

[in, out] netBufferLists

挿入されるパケット データを記述する NET_BUFFER_LIST 構造体へのポインター。 コールアウト ドライバーは、FwpsAllocateCloneNetBufferList0 関数または FwpsAllocateNetBufferAndNetBufferList0 関数を呼び出すことによって、パケット データを挿入するために使用するNET_BUFFER_LIST構造体を割り当てます。 NET_BUFFER_LIST構造体は、MAC ヘッダーで始まる必要があります。

[in] completionFn

吹き出しドライバーによって提供される completionFn 吹き出し関数へのポインター。 フィルター エンジンは、 netBufferLists パラメーターによって記述されたパケット データがネットワーク スタックに挿入された後に、この関数を呼び出します。 このポインターは、複製または作成されたNET_BUFFER_LIST構造体を挿入するときに指定する必要があります。 元のNET_BUFFER_LIST構造体を挿入するときに、元の構造体が変更されていない場合、このパラメーターは NULL にすることができます。

[in, optional] completionContext

completionFn パラメーターが指す引き出し関数に渡される、引き出しドライバーによって提供されるコンテキストへのポインター。 このパラメーターは省略可能であり、 NULL にすることができます

戻り値

FwpsInjectMacSendAsync0 関数は、次のいずれかの NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS
MAC フレーム データの挿入が正常に開始されました。 フィルター エンジンは、フィルター エンジンが MAC フレーム データの挿入を完了した後、またはエラーが発生したときに、完了関数を呼び出します。 エラーが発生した場合、完了したNET_BUFFER_LIST構造体の Status メンバーは、エラーの理由を示します。
STATUS_FWP_TCPIP_NOT_READY
MAC レイヤーは、パケット データの挿入を受け入れる準備ができていません。
STATUS_FWP_INJECT_HANDLE_CLOSING
インジェクション ハンドルが閉じられています。
STATUS_FWP_INJECT_HANDLE_STALE
インジェクション ハンドルは、 の flags パラメーターを使用して作成されませんでした FwpsInjectionHandleCreate0 関数をFWPS_INJECTION_TYPE_L2に設定します。
その他の状態コード
エラーが発生しました。

解説

コールバック ドライバーは FwpsInjectMacSendAsync0 関数を呼び出して、以前に吸収された MAC フレーム (またはフレームの複製) を、インターセプトされたレイヤー 2 の受信データ パスに再挿入するか、発明された MAC フレームを挿入します。

netBufferLists パラメーターには、NET_BUFFER_LIST チェーンを指定できます。 ただし、完了関数は、チェーンのセグメント (または単一のNET_BUFFER_LIST) を完了して、それぞれ複数回呼び出すことができます。

パケットが最初に分類されたものと同じフィルターと一致する場合、挿入されたフレームが再び分類される可能性があります。 そのため、IP レイヤーでの吹き出しと同様に、レイヤー 2 の吹き出しも 、FwpsQueryPacketInjectionState0 を呼び出すことによって無限のパケット検査から保護する必要があります。

要件

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

こちらもご覧ください

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsInjectionHandleCreate0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn