次の方法で共有


CoNDIS ドライバーからNET_BUFFER構造体を送信する

次の図は、プロトコル ドライバー、NDIS、ミニポート ドライバーを含む基本的な CoNDIS 送信操作を示しています。

プロトコル ドライバー、NDIS、ミニポート ドライバーを含む基本的な CoNDIS 送信操作を示す図。

上の図に示すように、プロトコル ドライバーは、NdisCoSendNetBufferLists 関数を呼び出して、仮想接続 (VC) 上 NET_BUFFER_LIST 構造体を送信します。 NDIS は、基になるミニポート ドライバーにNET_BUFFER_LIST構造体を転送するミニポート ドライバーの ミニポートCoSendNetBufferLists 関数を呼び出します。

すべてのNET_BUFFERベースの送信操作は非同期です。 したがって、ミニポート ドライバーは常に NdisMCoSendNetBufferListsComplete関数を呼び出し、データの送信が完了したときに適切な状態コードを提供します。 ミニポート ドライバーは、他のNET_BUFFER_LIST構造体に依存しない各NET_BUFFER_LIST構造体の送信操作を完了できます。 NDIS は、ミニポート ドライバーが NdisMCoSendNetBufferListsCompleteを呼び出すたびに、プロトコル ドライバーの ProtocolCoSendNetBufferListsComplete 関数を呼び出します。

プロトコル ドライバーは、NDIS がプロトコル ドライバーの ProtocolCoSendNetBufferListsComplete 関数を呼び出すとすぐに、NET_BUFFER_LIST 構造体とすべての関連する構造体とデータの所有権を再取得できます。

ミニポート ドライバーまたは NDIS は、任意の順序でNET_BUFFER_LIST構造体を返すことができます。 ただし、プロトコル ドライバーでは、各NET_BUFFER_LIST構造体にアタッチされている NET_BUFFER 構造体の一覧が変更されていないことが保証されます。

プロトコル ドライバーは、NET_BUFFER_LIST 構造体の SourceHandle メンバーを、NdisCoSendNetBufferLists NdisVcHandle パラメーターと同じ値設定します。 NDIS は、SourceHandle メンバーを使用して、NET_BUFFER_LIST構造体を送信したプロトコル ドライバーにNET_BUFFER_LIST構造体を返します。

中間ドライバーは、NET_BUFFER_LIST構造体の SourceHandle メンバーを NdisVcHandle 値に設定します。 中間ドライバーが送信要求を転送する場合、ドライバーは、SourceHandle メンバーに書き込む前に、基になるドライバーが指定した SourceHandle 値を保存する必要があります。 NDIS が中間ドライバーに転送されたNET_BUFFER_LIST構造体を返す場合、中間ドライバーは、SourceHandle を復元する必要があります。

プロトコル ドライバーは、コネクションレス ドライバーと同じメカニズムを使用して要求の送信を取り消すことができます。 送信要求の取り消しの詳細については、「送信操作 の取り消しを参照してください。