NET_BUFFER Struktur (ndis/nbl.h)

Die NET_BUFFER-Struktur gibt Daten an, die über das Netzwerk übertragen oder empfangen werden.

Syntax

typedef struct _NET_BUFFER {
  union {
    struct {
      NET_BUFFER *Next;
      MDL        *CurrentMdl;
      ULONG      CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      MDL        *MdlChain;
      ULONG      DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT           ChecksumBias;
  USHORT           Reserved;
  NDIS_HANDLE      NdisPoolHandle;
  PVOID            NdisReserved[2];
  PVOID            ProtocolReserved[6];
  PVOID            MiniportReserved[4];
  PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    NET_BUFFER_SHARED_MEMORY *SharedMemoryInfo;
    SCATTER_GATHER_LIST      *ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

Member

Next

Ein Zeiger auf die nächste NET_BUFFER Struktur in einer verknüpften Liste mit NET_BUFFER Strukturen. Wenn es sich bei dieser Struktur um die letzte NET_BUFFER-Struktur in der Liste handelt, ist dieses Element NULL.

CurrentMdl

Ein Zeiger auf die erste MDL, die der aktuelle Treiber verwendet. Dieser Member bietet eine Optimierung, die die Leistung verbessert, indem alle MDLs übersprungen werden, die der aktuelle Treiber nicht verwendet.

CurrentMdlOffset

Der Offset in Bytes zum Anfang des verwendeten Datenbereichs in der MDL, der vom CurrentMdl-Element angegeben wird.

DataLength

Die Länge des verwendeten Datenbereichs in Bytes in der MDL-Kette. Die maximale Länge beträgt 0xFFFFFFFF Bytes.

stDataLength

Die Länge des verwendeten Datenbereichs in Bytes in der MDL-Kette. Die maximale Länge beträgt 0xFFFFFFFF Bytes. Dieses Element ist identisch mit DataLength, aber sein Typ ist SIZE_T anstelle von ULONG.

MdlChain

Ein Zeiger auf eine verknüpfte Liste von MDLs, die einen Datenpuffer zuordnen. Der Datenpuffer speichert die Netzwerkdaten.

DataOffset

Der Offset in Bytes vom Anfang der MDL-Kette bis zum Anfang der Netzwerkdaten in der MDL-Kette. Dieser Offset ist auch die Größe des nicht verwendeten Datenbereichs in Bytes.

Link

Reserviert für NDIS.

NetBufferHeader

Eine NET_BUFFER_HEADER-Struktur . Dies ist aus Kompatibilitätsgründen ein Duplikat der oben genannten Union.

ChecksumBias

Die Anzahl der Bytes, die beim Berechnen einer Prüfsumme vom Anfang des Datenpuffers übersprungen werden sollen. Dieses Element wird vom TCP/IP-Protokoll verwendet.

Reserved

Für die zukünftige Verwendung reserviert.

NdisPoolHandle

Ein Poolhandle, das den NET_BUFFER Pools identifiziert, aus dem die NET_BUFFER-Struktur zugeordnet wurde.

NdisReserved[2]

Reserviert für NDIS.

ProtocolReserved[6]

Reserviert für die Verwendung durch Protokolltreiber. Protokolltreiber und NDIS-Zwischentreiber können diesen Bereich für ihre eigenen Zwecke verwenden. Zwischentreiber können diesen Member nur verwenden, wenn es noch nicht verwendet wird.

MiniportReserved[4]

Reserviert für die Verwendung durch Miniporttreiber. Miniport-Treiber und NDIS-Zwischentreiber können diesen Bereich für ihre eigenen Zwecke verwenden.

DataPhysicalAddress

Hinweis Der Name dieses Members lautet NdisReserved1 für NDIS 6.0-Treiber und ist DataPhysicalAddress für NDIS 6.1- und höhere Treiber. Für NDIS 6.0-Treiber ist dieses Member für NDIS reserviert.
 
Die physische Adresse des Datenteils eines Frames. Dieser Member sollte 0 sein, wenn der Treiber, der NET_BUFFER zugewiesen hat, die Adresse nicht angibt. Dieser Member ist nur gültig, wenn das NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER- oder NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD-Flag im NblFlags-Element der NET_BUFFER_LIST-Struktur festgelegt ist, die dem NET_BUFFER zugeordnet ist.
Hinweis Ein Miniporttreiber kann den DataPhysicalAddress-Member der NET_BUFFER-Struktur festlegen, auch wenn die Struktur keinem geteilten Frame zugeordnet ist. In diesem Fall enthält DataPhysicalAddress die physische Adresse des Headers MDL.
 

SharedMemoryInfo

Ein Zeiger auf einen NET_BUFFER_SHARED_MEMORY Struktur.

ScatterGatherList

Die SCATTER_GATHER_LIST-Struktur beschreibt eine Scatter/Gather-Liste für DMA.

Hinweise

NDIS-Treiber können die folgenden Funktionen aufrufen, um eine NET_BUFFER-Struktur zuzuordnen und zu initialisieren:

NDIS-Treiber können den NdisAllocateNetBufferListPool-Funktion , und legen Sie dann das fAllocateNetBuffer-Element der NET_BUFFER_LIST_POOL_PARAMETERS-Struktur auf TRUE fest, wenn ein NET_BUFFER_LIST Strukturpool zugewiesen wird. In diesem Fall wird jeder NET_BUFFER_LIST Struktur, die der Treiber aus dem Pool ordnet, eine NET_BUFFER Struktur vorab zugeordnet.

An jede NET_BUFFER Struktur verkettet sind mindestens ein Pufferdeskriptor, die Puffer zuordnen, die Netzwerkpaketdaten enthalten. Diese Pufferdeskriptoren werden als MDL-Kette im NetBufferHeader-Element angegeben. Solche Netzwerkpaketdaten wurden entweder empfangen oder werden übertragen.

Um auf zusätzlichen Datenspeicher in der MDL-Kette zuzugreifen, können NDIS-Treiber die folgenden Funktionen aufrufen:

NDIS-Treiber verwenden in der Regel die Member MiniportReserved oder ProtocolReserved der NET_BUFFER-Struktur, um NET_BUFFER Strukturkontextinformationen zu verwalten.
Hinweis Nur ein Treiber kann MiniportReserved - oder ProtocolReserved-Member verwenden. Wenn ein anderer Treiber eines dieser Member verwendet hat, kann sie daher nicht von einem Zwischentreiber verwendet werden.
 
Verwenden Sie die folgenden Makros und Funktionen, um auf Elemente der NET_BUFFER-Struktur zuzugreifen:

NET_BUFFER_NEXT_NB

NET_BUFFER_FIRST_MDL

NET_BUFFER_DATA_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_PROTOCOL_RESERVED

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NdisGetPoolFromNetBuffer

Weitere Informationen zur Verwendung von Netzpuffern finden Sie unter NET_BUFFER-Architektur.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Unterstützt in NDIS 6.0 und höher.
Kopfzeile ndis/nbl.h (einschließlich ndis.h)

Weitere Informationen

NET_BUFFER_CHECKSUM_BIAS

NET_BUFFER_CURRENT_MDL

NET_BUFFER_CURRENT_MDL_OFFSET

NET_BUFFER_DATA_LENGTH

NET_BUFFER_DATA_OFFSET

NET_BUFFER_FIRST_MDL

NET_BUFFER_HEADER

NET_BUFFER_LIST

NET_BUFFER_LIST_POOL_PARAMETERS

NET_BUFFER_MINIPORT_RESERVED

NET_BUFFER_NEXT_NB

NET_BUFFER_PROTOCOL_RESERVED

NdisAllocateNetBuffer

NdisAllocateNetBufferAndNetBufferList NdisAllocateNetBufferListPool

NdisGetPoolFromNetBuffer

NdisMSendNetBufferListsComplete NdisRetreatNetBufferDataStart NdisRetreatNetBufferListDataStart

SCATTER_GATHER_LIST