次の方法で共有


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

OSReserved0 メンバーと OSReserved2 メンバーを含む共用体。

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
Header ring.h