Freigeben über


NET_RING Struktur (ring.h)

Gibt einen Puffer an, der aus einer oder mehreren NET_PACKET oder NET_FRAGMENT Strukturen besteht.

Syntax

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;

Angehörige

OSReserved1

Reserviert. Clienttreiber dürfen diesen Wert nicht lesen oder schreiben.

ElementStride

Ein schreibgeschützter Byteoffset vom Anfang eines Elements bis zum Anfang des nächsten Elements. Verwenden Sie ((BYTE*)p + ElementStride), um die Adresse des nächsten Elements abzurufen.

NumberOfElements

Ein schreibgeschützter Wert, der die Anzahl der Pakete im Ringpuffer angibt, die immer eine Potenz von zwei und größer als eins ist.

ElementIndexMask

Eine schreibgeschützte UINT32-Maske, die verwendet werden kann, um einen Index effizient zu [0, NumberOfElements). Der Client kann diesen Wert verwenden, um einen Index zu berechnen, der den Ringpuffer umschließt. Verwenden Sie die Identitäts-(x % NumberofElements) == (x & ElementIndexMask).

EndIndex

Gibt den schreibgeschützten Index des letzten Elements an, das dem Clienttreiber im inklusiven Bereich gehört [0, NumberOfElements - 1].

DUMMYUNIONNAME

Eine Vereinigung, die die OSReserved0 und OSReserved2 Mitglieder enthält.

DUMMYUNIONNAME.OSReserved0

Reserviert. Clienttreiber dürfen diesen Wert nicht lesen oder schreiben.

DUMMYUNIONNAME.OSReserved2[4]

Reserviert. Clienttreiber dürfen diesen Wert nicht lesen oder schreiben.

BeginIndex

Gibt den Index des ersten Elements an, das dem Clienttreiber im inklusiven Bereich gehört [0, NumberOfElements - 1].

NextIndex

Gibt den Index des nächsten Elements an, das verarbeitet werden muss. Für die optionale Verwendung durch den Clienttreiber.

Scratch

Ein Zeiger auf einen Puffer, den der Clienttreiber für jeden Zweck verwenden kann.

Buffer[ANYSIZE_ARRAY]

Ein Bytearray, das die Elemente im Netzring enthält. In der Regel ruft ein Clienttreiber NetRingGetPacketAtIndex- oder NetRingGetFragmentAtIndex- auf, um auf die Elemente des Ringpuffers zuzugreifen.

Bemerkungen

Die NET_RING-Struktur ist ein generischer Ringpuffer, der für den effizienten Zugriff über einen einzelnen Thread optimiert ist. Ein NET_RING enthält NET_PACKET oder NET_FRAGMENT Elemente.

Weitere Informationen zu Paket- und Fragmentringpuffern finden Sie unter Paketdeskriptoren und Erweiterungen.

Weitere Informationen zur Verwendung von Netzringen finden Sie unter Einführung in Netzringe.

Anforderungen

Anforderung Wert
Minimale KMDF-Version 1.29
Mindest-UMDF-Version 2.33
Header- ring.h