NdisSendNetBufferLists 関数 (ndis.h)
プロトコル ドライバーは 、NdisSendNetBufferLists 関数を呼び出して、NET_BUFFER_LIST構造体の一覧に含まれるネットワーク データ を 送信します。
構文
void NdisSendNetBufferLists(
[in] NDIS_HANDLE NdisBindingHandle,
[in] __drv_aliasesMem PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG SendFlags
);
パラメーター
[in] NdisBindingHandle
ターゲット アダプターを識別するハンドル。 NdisOpenAdapterEx の以前の呼び出しで、このハンドルが返されました。
[in] NetBufferLists
NET_BUFFER_LIST構造体のリンクされたリストへのポインター。 各NET_BUFFER_LIST構造体は、 NET_BUFFER 構造体の一覧を記述します。
[in] PortNumber
ミニポート アダプターのポートを識別するポート番号。 ミニポート アダプターの既定のポート番号は 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条件に一致する構造体を示します。 このフラグは、ループバックのチェックや、他のバインディングでのループ バックには影響しません。
戻り値
なし
解説
プロトコル ドライバーが NdisSendNetBufferLists を呼び出した後、NDIS は基になるドライバーに NET_BUFFER_LIST 構造体を送信します。 MiniportSendNetBufferLists 関数。
プロトコル ドライバーは、次のいずれかの関数を呼び出すことによって、プールから各NET_BUFFER_LIST構造体を割り当てる必要があります。
プロトコル ドライバーは、 driverEntry ルーチンなど、NET_BUFFER_LIST構造体を事前に割り当てることができます。 または、ドライバーは、 NdisSendNetBufferLists を呼び出す直前に構造体を割り当ててから、送信操作が完了したときに解放することもできます。 NDIS が にNET_BUFFER_LIST構造体を返す場合 ProtocolSendNetBufferListsComplete、ミニポート ドライバーは、NET_BUFFER_LIST構造と、再利用するために関連付けられているリソースを準備できます。 NET_BUFFER_LIST構造体を再利用すると、構造体をプールに返し、別の送信操作のために再割り当てするよりもパフォーマンスが向上する可能性があります。プロトコル ドライバーは、各NET_BUFFER_LIST構造体の SourceHandle メンバーを NdisBindingHandle パラメーターに渡すのと同じ値に設定する必要があります。 バインディング ハンドルは、基になるミニポート ドライバーの呼び出し後に、NDIS がプロトコル ドライバーにNET_BUFFER_LIST構造体を返すために必要な情報を提供します NdisMSendNetBufferListsComplete。
NdisSendNetBufferLists を呼び出す前に、プロトコル ドライバーは、NET_BUFFER_LIST_INFO マクロ を使用して送信要求に付随する情報を設定できます。 基になるドライバーは、NET_BUFFER_LIST_INFO マクロを使用してこの情報を取得できます。
プロトコル ドライバーは、NET_BUFFER_LIST構造体の一覧を使用して NdisSendNetBufferLists を呼び出す前に、プロトコル ドライバーは、ネットワーク データをネットワーク 経由で送信する順序でNET_BUFFER_LIST構造体が設定されていることを確認する必要があります。
プロトコル ドライバーが NdisSendNetBufferLists を呼び出すとすぐに、NET_BUFFER_LIST構造体とすべての関連リソースの所有権が放棄されます。 NDIS は ProtocolSendNetBufferListsComplete 関数を呼び出して、構造体とデータをプロトコル ドライバーに返します。 NDIS では、ProtocolSendNetBufferListsComplete にリストを渡す前に、複数の送信要求からNET_BUFFER_LIST構造体のリンクされた 1 つのリストに構造体とデータを収集できます。
NDIS が ProtocolSendNetBufferListsComplete を呼び出すまで、プロトコル ドライバーによって開始される送信の現在の状態は、プロトコル ドライバーでは使用できません。 プロトコル ドライバーは、 NdisSendNetBufferLists を呼び出すときに送信要求に割り当てられたすべてのリソースの所有権を一時的に解放します。 プロトコル ドライバーは、NdisSendNetBufferLists を呼び出した後、NET_BUFFER_LIST構造体または関連付けられているデータを調べようとしないでください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | ndis.h (Ndis.h を含む) |
Library | Ndis.lib |
IRQL | <=DISPATCH_LEVEL |
DDI コンプライアンス規則 | Irql_SendRcv_Function(ndis) |