FILTER_SEND_NET_BUFFER_LISTS_COMPLETE コールバック関数 (ndis.h)

NDIS は FilterSendNetBufferListsComplete 関数を呼び出して、 を呼び出してフィルター ドライバーが開始した送信要求を完了します。 NdisFSendNetBufferLists 関数。

メモFILTER_SEND_NET_BUFFER_LISTS_COMPLETE型を使用して関数を宣言する必要があります。 詳細については、次の例に関するセクションを参照してください。
 

構文

FILTER_SEND_NET_BUFFER_LISTS_COMPLETE FilterSendNetBufferListsComplete;

void FilterSendNetBufferListsComplete(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] ULONG SendCompleteFlags
)
{...}

パラメーター

[in] FilterModuleContext

フィルター モジュールのコンテキスト領域へのハンドル。 FilterAttach 関数でこのコンテキスト領域を作成および初期化したフィルター ドライバー。

NetBufferList

フィルター ドライバーが渡 したNET_BUFFER_LIST 構造体のリンクされたリストへのポインター NdisFSendNetBufferLists

[in] SendCompleteFlags

OR 操作と組み合わせることができる NDIS フラグ。 すべてのフラグをクリアするには、このメンバーを 0 に設定します。 この関数は、次のフラグをサポートしています。

NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL

現在の IRQL がDISPATCH_LEVELされることを指定します。 このフラグの詳細については、「 ディスパッチ IRQL 追跡」を参照してください。

NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE

このフラグが設定されている場合、 NET_BUFFER_LIST 構造のリンクされたリスト内のすべてのパケットは、同じ Hyper-V 拡張可能スイッチのソース ポートから送信されます。

詳細については、「 Hyper-V 拡張可能スイッチの送受信フラグ」を参照してください。

メモNET_BUFFER_LIST構造体のリンクされたリスト内の各パケットが同じソース ポートを使用する場合、拡張機能は、要求の送信時に SendNetBufferListsSendFlags パラメーターに NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE フラグを設定する必要があります。
 
メモ このフラグは、NDIS 6.30 以降で使用できます。
 

戻り値

なし

解説

FilterSendNetBufferListsComplete は省略可能な関数です。 フィルター ドライバーが送信要求をフィルター処理しない場合は、 を呼び出すときに、この関数のエントリ ポイントを NULL に設定できます。 NdisFRegisterFilterDriver 関数。

フィルター ドライバーは、FilterSetModuleOptions 関数から NdisSetOptionalHandlers 関数を呼び出して、フィルター モジュールの FilterSendNetBufferListsComplete 関数を指定できます。

メモFilterSendNetBufferListsComplete 関数を提供しないフィルター ドライバーは、NdisFSendNetBufferLists 関数を呼び出すことができません。
 
NDIS が FilterSendNetBufferListsComplete を呼び出すと、フィルター ドライバーは NET_BUFFER_LIST 構造体と関連データの所有権を回復します。

基になるドライバーが送信要求を開始した場合、フィルター ドライバーは NdisFSendNetBufferListsComplete 関数を呼び出して送信要求を完了する必要があります。

フィルター ドライバーが送信要求を開始した場合、 FilterSendNetBufferListsComplete、NET_BUFFER_LIST 構造体と関連データを解放するか、 NdisFSendNetBufferLists への後続の呼び出しで再利用できるように準備することができます。

メモフィルター ドライバーは、開始する送信要求を追跡し、NDIS がこのような要求に対して FilterSendNetBufferListsComplete を呼び出すときに NdisFSendNetBufferListsComplete を呼び出さないことを確認する必要があります。
 
NDIS は、IRQL <= DISPATCH_LEVELで FilterSendNetBufferListsComplete を呼び出します。

FilterSendNetBufferListsComplete 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、" MySendNetBufferListsComplete" という名前の FilterSendNetBufferListsComplete 関数を定義するには、次のコード例に示すように 、FILTER_SEND_NET_BUFFER_LISTS_COMPLETE 型を使用します。

FILTER_SEND_NET_BUFFER_LISTS_COMPLETE MySendNetBufferListsComplete;

次に、次のように関数を実装します。

_Use_decl_annotations_
VOID
 MySendNetBufferListsComplete(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendCompleteFlags
    )
  {...}

FILTER_SEND_NET_BUFFER_LISTS_COMPLETE関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のFILTER_SEND_NET_BUFFER_LISTS_COMPLETE関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

FilterAttach

FilterSetModuleOptions

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisSetOptionalHandlers