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;

Member

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, wobei immer eine Leistung von zwei und größer als eins ist.

ElementIndexMask

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

EndIndex

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

DUMMYUNIONNAME

Eine Union, die die Mitglieder OSReserved0 und OSReserved2 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 im Besitz des Clienttreibers im inklusiven Bereich [0, NumberOfElements - 1] an.

NextIndex

Gibt den Index des nächsten Elements an, das verarbeitet werden muss. Zur optionalen 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.

Hinweise

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
KMDF-Mindestversion 1.29
UMDF-Mindestversion 2.33
Kopfzeile ring.h