中間ドライバー は、ネットワーク 経由で送信する上位レベルのドライバーから 1 つ以上の関連する MDL を持つNET_BUFFER_LIST構造体を受け取ります。 中間ドライバーは、ドライバーに接続なしの下端がある場合 は NdisSendNetBufferLists を呼び出すか、ドライバーに接続指向の下端がある場合は NdisCoSendNetBufferLists を呼び出すことによって、基になるドライバーにデータを渡すことができます。 または、中間ドライバーは、チェーンされたバッファーの内容、または他の転送に対する受信データの順序またはタイミングを変更するいくつかのアクションを実行できます。
中間ドライバーの目的に応じて、このようなドライバーは、受信NET_BUFFER_LIST構造体にチェーンされているバッファーを再パッケージ化できます。 たとえば、中間ドライバーは、次の状況でネットワーク データを再パッケージ化します。
中間ドライバーは、基になるメディア経由で 1 つのバッファーで送信できるよりも大きなデータ バッファーを、上にあるプロトコル ドライバーから受信します。 そのため、中間ドライバーは、受信データをより小さなバッファーに分割する必要があります。
中間ドライバーは、各送信を基になるドライバーに転送する前に、データを圧縮または暗号化することで、ネットワーク データの長さまたは内容を変更します。
ネットワーク データ管理の作成については、「 プロトコル ドライバー バッファー管理」を参照してください。
NDIS は、 NET_BUFFER_LIST構造体を 複製およびフラグメント化するためのインターフェイスを提供します。 構造体の複製と断片化の詳細については、「 派生NET_BUFFER_LIST構造体」を参照してください。
NET_BUFFER_LIST構造体は、必要に応じて、ドライバーの初期化時に、または ProtocolBindAdapterEx 関数で割り当てることができます。 中間ドライバー開発者は、必要に応じて、およびパフォーマンス上の理由から、初期化時に多数の構造体を割り当てることができます。 これにより、ProtocolReceiveNetBufferLists が上位レベルのドライバーに示すために受信データをコピーするリソースを事前に割り当てることができ、 また、ミニポートSendNetBufferLists が次の下位ドライバーに受信送信ネットワーク データを渡す NET_BUFFER_LIST 構造体 (およびバッファー) を使用できるようになります。
中間ドライバーがデータの送信または受信したデータを新しいバッファーまたはバッファーにコピーし、最後のバッファー内の実際のデータの長さがバッファーの割り当てられた長さよりも短い場合、中間ドライバーは NdisAdjustMdlLength を呼び出して、バッファーをデータの実際の長さに調整できます。
コネクションレスの下端を持つ中間ドライバーは、常にその ProtocolReceiveNetBufferLists 関数から基になるミニポート アダプターから受信データを受信します。
接続指向の下端を持つ中間ドライバーは、常にその ProtocolCoReceiveNetBufferLists 関数から基になるミニポート アダプターからデータを受信します。