複製された NET_BUFFER_LIST 構造
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 には、親構造へのポインターがあります。 NET_BUFFER_LIST_CONTEXT 構造ポインターが存在する NULL は、子に NET_BUFFER_LIST_CONTEXT 構造がないことを示します。
ドライバーは、 NdisAllocateCloneNetBufferList 関数を呼び出して、複製 NET_BUFFER_LIST 構造を作成します。 NDIS は、複製された NET_BUFFER 構造を持つ新しいNET_BUFFER構造を MDL に割り当てます。 NDIS は、複製された構造の NET_BUFFER_LIST_CONTEXT 構造を割り当てません。 新しい NET_BUFFER 構造と MDL は、親構造と同じデータを記述します。 データはコピーされません。
ドライバーは、NdisFreeCloneNetBufferList 関数を呼び出して、関連付けられているすべての NET_BUFFER 構造と、NdisAllocateCloneNetBufferList を呼び出すことによって以前に割り当てられていた MDL チェーンを解放します。