NDIS ドライバーは、既存のNET_BUFFER_LIST構造体から複製された NET_BUFFER_LIST 構造体を作成します。 複製された構造体は、元の構造データを参照します。 ドライバーは、この種類の構造体を使用して、同じデータを複数のパスに効率的に転送できます。
次の図は、親NET_BUFFER_LIST構造体と複製された子構造体の関係を示しています。
上の図には、親 NET_BUFFER_LIST 構造体と、その親から派生した子構造体が含まれています。 親構造体には、1 つの NET_BUFFER_LIST_CONTEXT 構造体と、MDL がアタッチされた 1 つの NET_BUFFER 構造体があります。 親構造体の親ポインターは、派生構造体ではないことを示す NULL 。
子NET_BUFFER_LIST構造体には、MDLs がアタッチされた 1 つのNET_BUFFER構造体があります。 子NET_BUFFER_LISTには、親構造体へのポインターがあります。 NULL NET_BUFFER_LIST_CONTEXT構造体ポインターは、子にNET_BUFFER_LIST_CONTEXT構造体がないことを示します。
ドライバーは、NdisAllocateCloneNetBufferList 関数を呼び出して、複製 NET_BUFFER_LIST 構造体を作成します。 NDIS は、複製されたNET_BUFFER_LIST構造体を持つ新しい NET_BUFFER 構造体と MDLs を割り当てます。 NDIS は、複製された構造体の NET_BUFFER_LIST_CONTEXT 構造体を割り当てません。 新しいNET_BUFFER構造体と MDL は、親構造体と同じデータを記述します。 データはコピーされません。
ドライバーは、NdisFreeCloneNetBufferList 関数を呼び出して、NET_BUFFER_LIST構造体と、以前に NdisAllocateCloneNetBufferList を呼び出すことによって割り当てられたすべての関連NET_BUFFER構造体と MDL チェーン解放します。