次の方法で共有


NdisFSendNetBufferLists 関数 (ndis.h)

フィルター ドライバーは NdisFSendNetBufferLists 関数を呼び出して、ネットワーク データ バッファーの一覧を送信します。

構文

void NdisFSendNetBufferLists(
  [in] NDIS_HANDLE                       NdisFilterHandle,
       __drv_aliasesMem PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER                  PortNumber,
  [in] ULONG                             SendFlags
);

パラメーター

[in] NdisFilterHandle

このフィルター モジュールを識別する NDIS ハンドル。 NDIS は FilterAttach 関数の呼び出しでフィルター ドライバーにハンドルを渡しました。

NetBufferList

NET_BUFFER_LIST構造体のリンクされたリストへのポインター。 各 NET_BUFFER_LIST 構造体は、 NET_BUFFER 構造体の一覧を記述します。

[in] PortNumber

ミニポート アダプターのポートを識別するポート番号。 ミニポート アダプターのポート番号は、 NdisMAllocatePort 関数を呼び出すことによって割り当てられます。 0 の値は、ミニポート アダプターの既定のポートを識別します。

[in] SendFlags

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

NDIS_SEND_FLAGS_DISPATCH_LEVEL

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

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

NDIS がループバック用にチェックすることを指定します。 既定では、NDIS は送信要求を送信したドライバーにデータをループ バックしません。 上にあるドライバーは、このフラグを設定することで、この動作をオーバーライドできます。 このフラグが設定されている場合、NDIS は、バインドの受信条件に一致するデータを含むすべての NET_BUFFER 構造体を識別します。 NDIS は、NET_BUFFER基になるドライバーの条件に一致する構造体を示します。 このフラグは、他のバインディングでのループバックのチェックやループバックには影響しません。

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

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

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

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

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

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

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

メモ このフラグは、NDIS 6.30 以降で使用できます。
 

戻り値

なし

解説

フィルター ドライバーが NdisFSendNetBufferLists 関数を呼び出した後、NDIS は基になるドライバーに NET_BUFFER_LIST 構造体を送信します。

フィルター ドライバーは、送信要求を発生させたり、上にあるドライバーから受信した要求をフィルター処理したりできます。 フィルター ドライバーが送信要求を生成した場合、ドライバーはバッファー プールを割り当てる必要があります。 フィルター ドライバーは、プールから各 NET_BUFFER_LIST 構造体を割り当てます。

フィルター ドライバーは 、NET_BUFFER_LIST構造体を 事前に割り当てることも、 NdisFSendNetBufferLists を呼び出す直前に構造体を割り当ててから、送信操作が完了したときに解放することもできます。

フィルター ドライバーは、 NdisFilterHandle パラメーターに渡すのと同じ値を生成する各 NET_BUFFER_LIST 構造体の SourceHandle メンバーを設定する必要があります。 フィルター ハンドルは、NDIS がフィルター ドライバーに NET_BUFFER_LIST 構造体を返すために必要な情報を提供します。 フィルター ドライバーは、生成されなかったNET_BUFFER_LIST構造体の SourceHandle メンバーを変更しないでください。

NdisFSendNetBufferLists を呼び出す前に、フィルター ドライバーは、NET_BUFFER_LIST_INFO マクロを使用して送信要求に付随する情報を設定できます。 基になるドライバーは、 NET_BUFFER_LIST_INFO マクロを使用してこの情報を取得できます。

NDIS はフィルター ドライバーを呼び出します。上にあるドライバーからの送信要求を渡す FilterSendNetBufferLists 関数。 フィルター ドライバーは、FilterSendNetBufferLists で受信したNET_BUFFER_LISTT 構造体を NdisFSendNetBufferLists に渡すことによって、このような要求を渡すことができます。

フィルター ドライバーが NdisFSendNetBufferLists 関数を呼び出すとすぐに、 NET_BUFFER_LIST 構造と関連するすべてのリソースの所有権が放棄されます。 NDIS は を呼び出します。構造体とデータをフィルター ドライバーに返す FilterSendNetBufferListsComplete 関数。 NDIS では、FilterSendNetBufferListsComplete にリストを渡す前に、複数の送信要求から、NET_BUFFER_LIST構造体の 1 つのリンクされたリストに構造体とデータを収集できます。

NDIS が FilterSendNetBufferListsComplete を呼び出すまで、送信要求の現在の状態はフィルター ドライバーでは使用できません。 フィルター ドライバーは、 NdisFSendNetBufferLists を呼び出すときに、送信要求に関連付けられているすべてのリソースの所有権を一時的に解放します。 フィルター ドライバーは、NdisFSendNetBufferLists を呼び出した後、NET_BUFFER_LIST構造体や関連付けられているデータを調べようとしないでください。

メモ フィルター ドライバーは、発生した送信要求を追跡し、 を呼び出していないことを確認する必要があります。このような要求が完了した場合の NdisFSendNetBufferListsComplete 関数。
 

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム デスクトップ
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 Irql_Filter_Driver_Function(ndis)

こちらもご覧ください

FilterAttach

FilterSendNetBufferLists

FilterSendNetBufferListsComplete

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisMAllocatePort