次の方法で共有


CoNDIS ドライバーからの NET_BUFFER 構造の送信

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

Diagram illustrating a basic CoNDIS send operation involving a protocol driver, NDIS, and a miniport driver.

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

すべての 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 メンバーを NdisCoSendNetBufferListsNdisVcHandle パラメーターと同じ値に設定します。 NDIS では、 SourceHandle メンバーを使用して、NET_BUFFER_LIST 構造体を送信したプロトコル ドライバーに NET_BUFFER_LIST 構造体を返します。

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

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