FwpsInjectMacReceiveAsync0 関数 (fwpsk.h)
FwpsInjectMacReceiveAsync0 関数は、以前に吸収されたメディア アクセス制御 (MAC) フレーム (またはフレームのクローン) を、インターセプトされたレイヤー 2 の受信データ パスに再結合したり、発明された MAC フレームを挿入したりできます。
構文
NTSTATUS FwpsInjectMacReceiveAsync0(
[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 関数の呼び出しによって以前に取得されたインジェクション ハンドル。
[in, optional] injectionContext
挿入コンテキストへの省略可能なハンドル。 指定した場合は、 を呼び出すことで取得できます。 FwpsQueryPacketInjectionState0 関数は、パケット インジェクション状態 FWPS_PACKET_INJECTION_STATE が FWPS_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構造体を割り当てます。
の場合 (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET)
、NET_BUFFER_LISTはイーサネット ヘッダーで始まる必要があります。
の場合 (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE)
、NET_BUFFER_LISTは MAC ヘッダーで始まる必要があります。
[in] completionFn
吹き出しドライバーによって提供される completionFn 吹き出し関数へのポインター。 フィルター エンジンは、 netBufferLists パラメーターによって記述されたパケット データがネットワーク スタックに挿入された後に、この関数を呼び出します。 このポインターは、複製または作成されたNET_BUFFER_LIST構造体を挿入するときに指定する必要があります。 元のNET_BUFFER_LIST構造体を挿入するときに、元の構造体が変更されていない場合、このパラメーターは NULL にすることができます。
[in, optional] completionContext
completionFn パラメーターが指す引き出し関数に渡される、引き出しドライバーによって提供されるコンテキストへのポインター。 このパラメーターは省略可能であり、 NULL にすることができます。
戻り値
FwpsInjectMacReceiveAsync0 関数は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
MAC フレーム データの挿入が正常に開始されました。 フィルター エンジンは、フィルター エンジンが MAC フレーム データの挿入を完了した後、またはエラーが発生したときに、完了関数を呼び出します。 エラーが発生した場合、完了したNET_BUFFER_LIST構造体の Status メンバーは、エラーの理由を示します。 |
|
MAC レイヤーは、パケット データの挿入を受け入れる準備ができていません。 |
|
インジェクション ハンドルが閉じられています。 |
|
インジェクション ハンドルは、 の flags パラメーターを使用して作成されませんでした FwpsInjectionHandleCreate0 関数をFWPS_INJECTION_TYPE_L2に設定します。 |
|
エラーが発生しました。 |
解説
コールバック ドライバーは FwpsInjectMacReceiveAsync0 関数を呼び出して、以前に吸収された 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 |