共用方式為


NET_RING 結構 (ring.h)

指定由一或多個 NET_PACKETNET_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

包含 OSReserved0OSReserved2 成員的聯集。

DUMMYUNIONNAME.OSReserved0

保留的。 用戶端驅動程式不得讀取或寫入此值。

DUMMYUNIONNAME.OSReserved2[4]

保留的。 用戶端驅動程式不得讀取或寫入此值。

BeginIndex

指定內含範圍 [0, NumberOfElements - 1] 內含範圍中用戶端驅動程序擁有之第一個專案的索引。

NextIndex

指定需要處理之下一個專案的索引。 供客戶端驅動程式選擇性使用。

Scratch

用戶端驅動程式可能用於任何用途的緩衝區指標。

Buffer[ANYSIZE_ARRAY]

位元組陣列,其中包含 net ring 中的專案。 一般而言,用戶端驅動程式會呼叫 NetRingGetPacketAtIndexNetRingGetFragmentAtIndex 來存取通道緩衝區的專案。

備註

NET_RING 結構是泛型通道緩衝區,已針對從單一線程有效率的存取進行優化。 NET_RING包含NET_PACKETNET_FRAGMENT元素。

如需封包和片段通道緩衝區的詳細資訊,請參閱 封包描述元和延伸模組

如需使用 net 通道的詳細資訊,請參閱 net 通道簡介

規格需求

需求
最小 KMDF 版本 1.29
最低UMDF版本 2.33
標頭 ring.h