共用方式為


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