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
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使用します。ネット バッファーの使用方法の詳細については、「 NET_BUFFER アーキテクチャ」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
Header | ndis/nbl.h (ndis.h を含む) |
こちらもご覧ください
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart