次の方法で共有


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 構造体を送信します。 ミニポートSendNetBufferLists 関数です。

プロトコル ドライバーは、次のいずれかの関数を呼び出して、プールから各NET_BUFFER_LIST構造体を割り当てる必要があります。

  • NdisAllocateNetBufferList

  • NdisAllocateNetBufferAndNetBufferList
  • NdisAllocateCloneNetBufferList
プロトコル ドライバーは、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 構造体の単一のリンクされたリストに構造体とデータ 収集できます。

NDIS が ProtocolSendNetBufferListsComplete 呼び出すまで、プロトコル ドライバーによって開始される送信の現在の状態は、プロトコル ドライバーでは使用できません。 プロトコル ドライバーは、NdisSendNetBufferLists 呼び出すときに、送信要求に割り当てられたすべてのリソースの所有権を一時的に解放します。 プロトコル ドライバー NdisSendNetBufferLists を呼び出した後、NET_BUFFER_LIST構造体または関連するデータ調べようと しないでください。

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.0 以降でサポートされています。
ターゲット プラットフォーム 万国
ヘッダー ndis.h (Ndis.h を含む)
ライブラリ Ndis.lib
IRQL <=DISPATCH_LEVEL
DDI コンプライアンス規則 する Irql_SendRcv_Function(ndis)

関連項目

DriverEntry

ミニポートSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAllocateCloneNetBufferList NdisAllocateNetBufferAndNetBufferList

NdisAllocateNetBufferList

NdisMAllocatePort

NdisMSendNetBufferListsComplete

NdisOpenAdapterEx

ProtocolSendNetBufferListsComplete