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 |