NET_RING結構 (ring.h)
指定由一或多個 NET_PACKET 或 NET_FRAGMENT 結構組成的緩衝區。
語法
typedef struct _NET_RING {
UINT16 OSReserved1;
UINT16 ElementStride;
UINT32 NumberOfElements;
UINT32 ElementIndexMask;
UINT32 EndIndex;
union {
UINT32 OSReserved0;
void *OSReserved2[4];
} DUMMYUNIONNAME;
UINT32 BeginIndex;
UINT32 NextIndex;
void *Scratch;
unsigned char Buffer[ANYSIZE_ARRAY];
} NET_RING;
成員
OSReserved1
保留。 用戶端驅動程式不得讀取或寫入此值。
ElementStride
從一個項目開頭到下一個元素開頭的唯讀位移。 使用 ((BYTE*)p + ElementStride)
取得下一個項目的位址。
NumberOfElements
只讀值,表示通道緩衝區中的封包數目,一律為兩個乘冪,且大於一個。
ElementIndexMask
唯讀 UINT32 遮罩,可用來有效率地限制索引以 [0, NumberOfElements]。 用戶端可以使用此值來計算圍繞環形緩衝區的索引。 使用身分識別 (x % NumberofElements) == (x & ElementIndexMask)
。
EndIndex
指定內含範圍 [0, NumberOfElements - 1] 中用戶端驅動程式擁有之最後一個專案的只讀索引。
DUMMYUNIONNAME
聯集,包含 OSReserved0 和 OSReserved2 成員。
DUMMYUNIONNAME.OSReserved0
保留。 用戶端驅動程式不得讀取或寫入此值。
DUMMYUNIONNAME.OSReserved2[4]
保留。 用戶端驅動程式不得讀取或寫入此值。
BeginIndex
指定內含範圍 [0, NumberOfElements - 1] 內含範圍中用戶端驅動程序擁有之第一個專案的索引。
NextIndex
指定需要處理之下一個專案的索引。 供客戶端驅動程式選擇性使用。
Scratch
用戶端驅動程式可用於任何用途之緩衝區的指標。
Buffer[ANYSIZE_ARRAY]
位元組陣列,其中包含 net ring 中的專案。 用戶端驅動程式通常會呼叫 NetRingGetPacketAtIndex 或 NetRingGetFragmentAtIndex 來存取信號緩衝區的專案。
言論
NET_RING 結構是泛型環形緩衝區,已針對從單個線程的有效存取進行優化。 NET_RING 包含 NET_PACKET 或 NET_FRAGMENT 專案。
如需封包和片段通道緩衝區的詳細資訊,請參閱 封包描述元和延伸模組。
如需使用 net 信道的詳細資訊,請參閱 net 信道簡介。
要求
要求 | 價值 |
---|---|
最低 KMDF 版本 | 1.29 |
最低 UMDF 版本 | 2.33 |
標頭 | ring.h |