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 拡張可能スイッチの送受信フラグ」を参照してください。
NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP
このフラグが設定されている場合、 NET_BUFFER_LIST 構造のリンクされたリスト内のすべてのパケットは、同じ拡張可能スイッチの宛先ポートに転送されます。
詳細については、「 Hyper-V 拡張可能スイッチの送受信フラグ」を参照してください。
戻り値
なし
解説
フィルター ドライバーが 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構造体や関連付けられているデータを調べようとしないでください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | デスクトップ |
Header | ndis.h (Ndis.h を含む) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | Irql_Filter_Driver_Function(ndis) |