NDIS 6.0 以降の NET_BUFFER 構造体は、NDIS 5 で使用される NDIS_PACKET 構造体に似ています。x以前のドライバーを します。 各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 で使用されるデータ領域の先頭へのオフセットをバイト単位で指定します。
次の図は、CurrentMdl、CurrentMdlOffset、DataOffset、および DataLength メンバーとデータ空間 関係を示しています。
NDIS は、MDL チェーン内のデータ空間を管理する関数を提供します。 ドライバーが現在のドライバーでデータ領域の変更を動的に使用する方法。 現在のドライバーで現在使用されていないデータ領域がある場合があります。 未使用のデータ領域 は現在使用されていませんが、有効なデータを含めることができます。 たとえば、受信パスでは、未使用のデータ空間、下位レベルのドライバーによって使用されたヘッダー情報を含めることができます。
ドライバーは、使用されるデータ空間 を増減するために、退避と事前操作を実行します。 退避操作と事前操作の詳細については、「リトリートとアドバンスオペレーション」を参照してください。
次の用語と定義では、NET_BUFFER データ空間の要素について説明します。
使用済みデータ領域
使用済みデータ領域 には、現在のドライバーが現在の時刻に使用しているデータが含まれています。 ドライバーは、退避操作 使用されるデータ領域 を増やし、事前操作で使用されるデータ領域 削減します。
未使用のデータ領域を する
現在のドライバーは、現在の時刻にこのデータ領域を使用していません。
合計データ サイズ
合計データ サイズは、使用 データ空間 のサイズと、未使用のデータ領域 の合計です。 合計サイズを計算するには、DataOffset を DataLength に追加します。