次の方法で共有


NET_RING構造体 (ring.h)

1 つ以上の 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

1 つの要素の先頭から次の要素の先頭までの読み取り専用バイト オフセット。 ((BYTE*)p + ElementStride) を使用して、次の要素のアドレスを取得します。

NumberOfElements

リング バッファー内のパケットの数を示す読み取り専用の値。これは常に 2 の累乗であり、1 より大きい値です。

ElementIndexMask

インデックスを効率的にクランプして [0, NumberOfElements) するために使用できる読み取り専用 UINT32 マスク。 クライアントはこの値を使用して、リング バッファーを囲むインデックスを計算できます。 ID (x % NumberofElements) == (x & ElementIndexMask)を使用します。

EndIndex

クライアント ドライバーが所有する最後の要素の読み取り専用インデックスを、包括範囲 [0, NumberOfElements - 1] で指定します。

DUMMYUNIONNAME

OSReserved0OSReserved2 メンバーを含む共用体。

DUMMYUNIONNAME.OSReserved0

引っ込み思案。 クライアント ドライバーでは、この値を読み取ったり書き込んだりすることはできません。

DUMMYUNIONNAME.OSReserved2[4]

引っ込み思案。 クライアント ドライバーでは、この値を読み取ったり書き込んだりすることはできません。

BeginIndex

クライアント ドライバーが所有する最初の要素のインデックスを、包括範囲 [0, NumberOfElements - 1] で指定します。

NextIndex

処理が必要な次の要素のインデックスを指定します。 クライアント ドライバーでオプションで使用する場合。

Scratch

クライアント ドライバーが任意の目的で使用できるバッファーへのポインター。

Buffer[ANYSIZE_ARRAY]

ネット リング内の要素を含むバイト配列。 通常、クライアント ドライバーは、NetRingGetPacketAtIndex または NetRingGetFragmentAtIndex を呼び出して、リング バッファーの要素にアクセスします。

備考

NET_RING 構造体は汎用リング バッファーであり、単一スレッドからの効率的なアクセス用に最適化されています。 NET_RING には、NET_PACKET または NET_FRAGMENT 要素が含まれています。

パケットおよびフラグメント リング バッファーの詳細については、「パケット記述子と拡張を参照してください。

ネット リングの使用方法の詳細については、「ネット リングの概要」を参照してください。

必要条件

要件 価値
最小 KMDF バージョン 1.29
UMDF の最小バージョン する 2.33
ヘッダー ring.h