再構築された NET_BUFFER_LIST 構造

NDIS ドライバーは、既存の NET_BUFFER_LIST 構造から再構成された NET_BUFFER_LIST 構造を作成できます。 再構成された構造は、複数のソース NET_BUFFER 構造の元のデータを参照します。 ドライバーは、この種類の構造を使用して、多数の小さなバッファーを 1 つの大きなバッファーに効率的に結合できます。

次の図は、親 NET_BUFFER_LIST 構造と再構成された子構造の関係を示しています。

Diagram illustrating the relationship between a parent NET_BUFFER_LIST structure and a reassembled child structure.

上の図には、親 NET_BUFFER_LIST 構造と、その親から派生した子構造が含まれています。 親構造には、1 つの NET_BUFFER_LIST_CONTEXT 構造と、MDL がアタッチされた 3 つの NET_BUFFER 構造があります。 親構造の親ポインターは、派生構造ではないことを示す NULL です。

子 NET_BUFFER_LIST 構造には、MDL がアタッチされた 1 つの NET_BUFFER 構造があります。 子 NET_BUFFER_LIST 構造には、親構造へのポインターがあります。 NET_BUFFER_LIST_CONTEXT 構造ポインターが存在する NULL は、子に NET_BUFFER_LIST_CONTEXT 構造がないことを示します。

NDIS ドライバーは、断片化された NET_BUFFER_LIST 構造を再構成する NdisAllocateReassembledNetBufferList 関数を呼び出します。 NDIS は、再構成された NET_BUFFER_LIST 構造を持つ新しい NET_BUFFER構造と MDL を割り当てます。 NDIS は、再構成された構造の NET_BUFFER_LIST_CONTEXT 構造を割り当てません。 再構成された NET_BUFFER 構造と MDL は、親構造と同じデータを記述します。 データはコピーされません。

再構成された NET_BUFFER_LIST 構造体を作成するため、NdisAllocateReassembledNetBufferList は、各親 NET_BUFFER 構造の StartOffset パラメーターで指定されたバイト数をスキップします。 NdisAllocateReassembledNetBufferList は、各親 NET_BUFFER 構造の残りのデータを、1 つの再構成された NET_BUFFER 構造の MDL チェーンに連結します。 NdisAllocateReassembledNetBufferList は、DataOffsetDelta で指定された量ずつ、再構成された NET_BUFFER 構造を再処理します (使用されるデータ領域を増やします)。

NDIS ドライバーは、NdisFreeReassembledNetBufferList 関数を呼び出して、再構成された NET_BUFFER_LIST 構造と、関連付けられている NET_BUFFER構造体および MDL チェーンを解放します。

派生 NET_BUFFER_LIST 構造