NET_BUFFER 構造

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

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

Diagram showing the fields in a NET_BUFFER structure.

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

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

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

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

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 内で使用されるデータ領域の先頭へのオフセットをバイト単位で指定します。

以下の図は、CurrentMdlCurrentMdlOffsetDataOffsetDataLength メンバーとデータ領域の関係を示しています。

Diagram depicting data space allocation in relation to CurrentMdl, CurrentMdlOffset, DataOffset, and DataLength.

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

ドライバーは、使用済みデータ領域を増やしたり減らしたりするために、後退操作と前進操作を実行します。 後退操作と前進操作の詳細については、「後退操作と前進操作」を参照してください。

以下の用語と定義は、NET_BUFFER データ領域の要素について説明します。

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

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

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

後退
後退操作により、使用済みデータ領域のサイズが大きくなります。

前進
前進操作により、使用済みデータ領域のサイズが小さくなります。