次の方法で共有


アドバンス操作

アドバンス操作では、NET_BUFFER 構造体、または NET_BUFFER_LIST 構造体内のすべての NET_BUFFER 構造体で使用されるデータ領域のサイズを減らすことができます。

ドライバーは、次のアドバンス関数を使用します。

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

アドバンス操作では、NET_BUFFER 構造体に関連付けられている MDL が解放される場合があります。 MDL を解放するメカニズムを提供するために、ドライバーは、NetFreeMdl 関数のオプションのエントリ ポイントを提供できます。 エントリ ポイントが NULL の場合、NDIS は既定のメソッドを使用して MDL を割り当てます。 MDL は、NetAllocateMdl 関数に MDL を割り当てるために使用されたメカニズムの逆数を使用して NetFreeMdl 内でのみ解放する必要があります。

新しい DataLength を取得する場合、NDIS は、現在の DataLength からドライバー指定の DataOffsetDelta を減算します。 前のリトリート操作で新しいデータ領域が割り当てられている場合、アドバンス操作では、以前に割り当てられたメモリを解放できます。 アドバンス操作でメモリが解放されない場合、NDIS は現在の DataOffsetDataOffsetDelta を追加して新しい DataOffset を取得します。 アドバンス操作によってメモリが解放された場合、NDIS はそれに応じて DataOffset を調整します。

送信が完了した場合、アドバンス操作では、以前のリトリート操作で割り当てられたメモリを解放できます。 パフォーマンスを向上させるために、ドライバーは、すべての下位ドライバーのリトリート操作に対応するために、十分な合計データ サイズを割り当ててから送信する必要があります。

受信表示の場合、アドバンス操作では、それに応じて DataOffsetDataLength を調整するだけです。 アドバンス操作の後、未使用のデータ領域内には下位レイヤーのヘッダーが残ります。