次の方法で共有


NET_BUFFER構造体

NDIS 6.0 以降の NET_BUFFER 構造体は、NDIS 5 で使用される NDIS_PACKET 構造体に似ています。x以前のドライバーを します。 各NET_BUFFER構造体は、ネットワーク データのパケットをパッケージ化します。

次の図は、NET_BUFFER構造体のフィールドを示しています。

NET_BUFFER構造のフィールドを示す図。

NET_BUFFER構造体には、NetBufferHeader メンバーに NET_BUFFER_HEADER 構造体が含まれています。 NET_BUFFER_HEADER構造体には、NetBufferData メンバーに NET_BUFFER_DATA 構造体が含まれています。 NDIS マクロを使用して、NET_BUFFER構造体のメンバーにアクセスする必要があります。 これらのマクロの完全な一覧については、NET_BUFFER 構造のリファレンス ページを参照してください。

一部の NET_BUFFER 構造体のメンバーは、NDIS でのみ使用されます。 ドライバーが通常使用するメンバーは次のとおりです。

プロトコル予約済み
プロトコル ドライバーで使用するために予約されています。

ミニポート予約
ミニポート ドライバーで使用するために予約されています。

NdisPoolHandle
NET_BUFFER構造体が割り当てられたNET_BUFFER プールを識別するプール ハンドルを指定します。

次の
NET_BUFFER構造体のリンクされたリスト内の次のNET_BUFFER構造体へのポインターを指定します。 これがリスト内の最後のNET_BUFFER構造体である場合、このメンバーは NULL

DataLength
MDL チェーン内のネットワーク データの長さをバイト単位で指定します。

DataOffset
MDL チェーン内のメモリの先頭から MDL チェーン内のネットワーク データの先頭までのオフセットをバイト単位で指定します。

CurrentMdl
現在のドライバーが使用している最初の MDL へのポインターを指定します。 このポインターは、現在のドライバーが使用していない MDL をスキップすることでパフォーマンスを向上させる最適化を提供します。

CurrentMdlOffset
NET_BUFFER構造体の CurrentMdl メンバーによって指定された、MDL で使用されるデータ領域の先頭へのオフセットをバイト単位で指定します。

次の図は、CurrentMdlCurrentMdlOffsetDataOffset、および DataLength メンバーとデータ空間 関係を示しています。

CurrentMdl、CurrentMdlOffset、DataOffset、DataLength に関連するデータ領域の割り当てを示す図。

NDIS は、MDL チェーン内のデータ空間を管理する関数を提供します。 ドライバーが現在のドライバーでデータ領域の変更を動的に使用する方法。 現在のドライバーで現在使用されていないデータ領域がある場合があります。 未使用のデータ領域 は現在使用されていませんが、有効なデータを含めることができます。 たとえば、受信パスでは、未使用のデータ空間、下位レベルのドライバーによって使用されたヘッダー情報を含めることができます。

ドライバーは、使用されるデータ空間 を増減するために、退避と事前操作を実行します。 退避操作と事前操作の詳細については、「リトリートとアドバンスオペレーション」を参照してください。

次の用語と定義では、NET_BUFFER データ空間の要素について説明します。

使用済みデータ領域
使用済みデータ領域 には、現在のドライバーが現在の時刻に使用しているデータが含まれています。 ドライバーは、退避操作 使用されるデータ領域 を増やし、事前操作で使用されるデータ領域 削減します。

未使用のデータ領域を する
現在のドライバーは、現在の時刻にこのデータ領域を使用していません。

合計データ サイズ
合計データ サイズは、使用 データ空間 のサイズと、未使用のデータ領域 の合計です。 合計サイズを計算するには、DataOffsetDataLength に追加します。

リトリート
退避操作により、使用 データ領域のサイズが

アドバンス
事前操作を実行すると、使用 データ領域のサイズが小さくなります。