NET_BUFFER構造体 (ndis/nbl.h)

NET_BUFFER構造体は、ネットワーク経由で送受信されるデータを指定します。

構文

typedef struct _NET_BUFFER {
  union {
    struct {
      NET_BUFFER *Next;
      MDL        *CurrentMdl;
      ULONG      CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      MDL        *MdlChain;
      ULONG      DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT           ChecksumBias;
  USHORT           Reserved;
  NDIS_HANDLE      NdisPoolHandle;
  PVOID            NdisReserved[2];
  PVOID            ProtocolReserved[6];
  PVOID            MiniportReserved[4];
  PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    NET_BUFFER_SHARED_MEMORY *SharedMemoryInfo;
    SCATTER_GATHER_LIST      *ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

メンバー

Next

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

CurrentMdl

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

CurrentMdlOffset

CurrentMdl メンバーによって指定された MDL 内の使用されるデータ空間の先頭へのオフセット (バイト単位)。

DataLength

MDL チェーンで使用されるデータ空間の長さ (バイト単位)。 最大長は0xFFFFFFFFバイトです。

stDataLength

MDL チェーンで使用されるデータ空間の長さ (バイト単位)。 最大長は0xFFFFFFFFバイトです。 このメンバーは DataLength と同じですが、その型は ULONG ではなくSIZE_T

MdlChain

データ バッファーをマップする MDL のリンクされたリストへのポインター。 データ バッファーには、ネットワーク データが格納されます。

DataOffset

MDL チェーンの先頭から MDL チェーン内のネットワーク データの先頭までのオフセット (バイト単位)。 このオフセットは、 未使用のデータ領域のサイズ (バイト単位) でもあります。

Link

NDIS 用に予約されています。

NetBufferHeader

NET_BUFFER_HEADER構造体。 これは、互換性上の理由から、上記の共用体の複製です。

ChecksumBias

チェックサムの計算時にデータ バッファーの先頭からスキップするバイト数。 このメンバーは、TCP/IP プロトコルによって使用されます。

Reserved

将来利用するために予約されています。

NdisPoolHandle

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

NdisReserved[2]

NDIS 用に予約されています。

ProtocolReserved[6]

プロトコル ドライバーで使用するために予約されています。 プロトコル ドライバーと NDIS 中間ドライバーは、独自の目的でこの領域を使用できます。 中間ドライバーは、まだ使用されていない場合にのみ、このメンバーを使用できます。

MiniportReserved[4]

ミニポート ドライバーで使用するために予約されています。 ミニポート ドライバーと NDIS 中間ドライバーは、独自の目的でこの領域を使用できます。

DataPhysicalAddress

メモ このメンバーの名前は NDIS 6.0 ドライバーの 場合は NdisReserved1 で、NDIS 6.1 以降のドライバーの DataPhysicalAddress です。 NDIS 6.0 ドライバーの場合、このメンバーは NDIS 用に予約されています。
 
フレームのデータ部分の物理アドレス。 NET_BUFFER割り当てられたドライバーがアドレスを指定しない場合、このメンバーは 0 にする必要があります。 このメンバーは、NET_BUFFERに関連付けられているNET_BUFFER_LIST構造体の NblFlags メンバーに NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER または NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD フラグが設定されている場合にのみ有効です。
メモ ミニポート ドライバーは、構造体が分割フレームに関連付けられていない場合でも、NET_BUFFER構造体の DataPhysicalAddress メンバーを設定できます。 この場合、 DataPhysicalAddress にはヘッダー MDL の物理アドレスが含まれます。
 

SharedMemoryInfo

へのポインター NET_BUFFER_SHARED_MEMORY 構造体。

ScatterGatherList

SCATTER_GATHER_LIST構造体は、DMA の散布/収集リストを記述します。

注釈

NDIS ドライバーは、次の関数を呼び出して、NET_BUFFER構造体を割り当てて初期化できます。

NDIS ドライバーは、 を呼び出すことができます。 NdisAllocateNetBufferListPool 関数を使用して、NET_BUFFER_LIST構造体プールを割り当てるときに、NET_BUFFER_LIST_POOL_PARAMETERS構造体の fAllocateNetBuffer メンバーTRUE に設定します。 この場合、NET_BUFFER構造体は、ドライバーがプールから割り当てる各NET_BUFFER_LIST構造体で事前に割り当てられます。

各NET_BUFFER構造体にチェーンされているのは、ネットワーク パケット データを含むバッファーをマップする 1 つ以上のバッファー記述子です。 これらのバッファー記述子は、 NetBufferHeader メンバーの MDL チェーンとして指定されます。 このようなネットワーク パケット データは、受信されたか、または送信されます。

MDL チェーン内の追加のデータ領域にアクセスするには、NDIS ドライバーは、次の関数を呼び出すことができます。

NDIS ドライバーは通常、構造体コンテキスト情報を維持するために、NET_BUFFER構造体の ミニポート予約 メンバーまたは プロトコル予約 済みメンバー NET_BUFFER使用します。
メモミニポート予約メンバーまたはプロトコル予約済みメンバーを使用できるドライバーは 1 つだけです。 したがって、他のドライバーがこれらのメンバーのいずれかを使用している場合、中間ドライバーはそれらを使用できません。
 
NET_BUFFER構造体のメンバーにアクセスするには、次のマクロと関数を使用します。

NET_BUFFER_NEXT_NB

NET_BUFFER_FIRST_MDL

NET_BUFFER_DATA_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_PROTOCOL_RESERVED

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NdisGetPoolFromNetBuffer

ネット バッファーの使用方法の詳細については、「 NET_BUFFER アーキテクチャ」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
Header ndis/nbl.h (ndis.h を含む)

こちらもご覧ください

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_DATA_OFFSET

NET_BUFFER_FIRST_MDL

NET_BUFFER_HEADER

NET_BUFFER_LIST

NET_BUFFER_LIST_POOL_PARAMETERS

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_NEXT_NB

NET_BUFFER_PROTOCOL_RESERVED

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool

NdisGetPoolFromNetBuffer

NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart

SCATTER_GATHER_LIST