次の方法で共有


再構築されたNET_BUFFER_LIST構造体

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

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

親NET_BUFFER_LIST構造と再構築された子構造の関係を示す図。

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

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

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

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

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

派生NET_BUFFER_LIST構造体