Compartir a través de


NET_BUFFER estructura (ndis/nbl.h)

La estructura NET_BUFFER especifica los datos que se transmiten o reciben a través de la red.

Sintaxis

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;

Miembros

Next

Puntero a la siguiente estructura de NET_BUFFER en una lista vinculada de estructuras de NET_BUFFER. Si esta estructura es la última estructura NET_BUFFER de la lista, este miembro es NULL.

CurrentMdl

Puntero al primer MDL que está usando el controlador actual. Este miembro proporciona una optimización que mejora el rendimiento omitiendo los MDL que el controlador actual no está usando.

CurrentMdlOffset

Desplazamiento, en bytes, al principio del espacio de datos usado en mdL especificado por el miembro CurrentMdl .

DataLength

Longitud, en bytes, del espacio de datos usado en la cadena MDL. La longitud máxima es 0xFFFFFFFF bytes.

stDataLength

Longitud, en bytes, del espacio de datos usado en la cadena MDL. La longitud máxima es 0xFFFFFFFF bytes. Este miembro es el mismo que DataLength, pero su tipo es SIZE_T en lugar de ULONG.

MdlChain

Puntero a una lista vinculada de MDL que asignan un búfer de datos. El búfer de datos almacena los datos de red.

DataOffset

Desplazamiento, en bytes, desde el principio de la cadena MDL hasta el principio de los datos de red de la cadena MDL. Este desplazamiento también es el tamaño, en bytes, del espacio de datos sin usar.

Link

Reservado para NDIS.

NetBufferHeader

Estructura de NET_BUFFER_HEADER . Se trata de un duplicado de la unión anterior, por motivos de compatibilidad.

ChecksumBias

Número de bytes que se omitirán desde el principio del búfer de datos al calcular una suma de comprobación. El protocolo TCP/IP usa este miembro.

Reserved

Reservado para uso futuro.

NdisPoolHandle

Identificador de grupo que identifica el grupo de NET_BUFFER del que se asignó la estructura de NET_BUFFER.

NdisReserved[2]

Reservado para NDIS.

ProtocolReserved[6]

Reservado para su uso por controladores de protocolo. Los controladores de protocolo y los controladores intermedios NDIS pueden usar esta área para sus propios fines. Los controladores intermedios solo pueden usar este miembro si aún no está en uso.

MiniportReserved[4]

Reservado para su uso por los controladores de minipuerto. Los conductores de miniporte y los controladores intermedios NDIS pueden usar esta área para sus propios propósitos.

DataPhysicalAddress

Nota El nombre de este miembro es NdisReserved1 para controladores NDIS 6.0 y es DataPhysicalAddress para controladores NDIS 6.1 y versiones posteriores. Para los controladores NDIS 6.0, este miembro está reservado para NDIS.
 
Dirección física de la parte de datos de un marco. Este miembro debe ser cero si el controlador que asignó NET_BUFFER no especifica la dirección. Este miembro solo es válido si la marca NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER o NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD está establecida en el miembro NblFlags de la estructura NET_BUFFER_LIST asociada al NET_BUFFER.
Nota Un controlador de minipuerto puede establecer el miembro DataPhysicalAddress de la estructura NET_BUFFER, incluso si la estructura no está asociada a un marco dividido. En este caso, DataPhysicalAddress contiene la dirección física del encabezado MDL.
 

SharedMemoryInfo

Puntero a un NET_BUFFER_SHARED_MEMORY estructura.

ScatterGatherList

La estructura de SCATTER_GATHER_LIST describe una lista de dispersión y recopilación para DMA.

Comentarios

Los controladores NDIS pueden llamar a las siguientes funciones para asignar e inicializar una estructura de NET_BUFFER:

Los controladores NDIS pueden llamar a Función NdisAllocateNetBufferListPool y, a continuación, establezca el miembro fAllocateNetBuffer de la estructura de NET_BUFFER_LIST_POOL_PARAMETERS en TRUE al asignar un grupo de estructuras de NET_BUFFER_LIST . En este caso, una estructura de NET_BUFFER se asigna previamente con cada estructura NET_BUFFER_LIST que asigna el controlador desde el grupo.

Encadenados a cada estructura de NET_BUFFER son uno o varios descriptores de búfer que asignan búferes que contienen datos de paquetes de red. Estos descriptores de búfer se especifican como una cadena MDL en el miembro NetBufferHeader . Estos datos de paquetes de red se recibieron o se transmitirán.

Para acceder al espacio de datos adicional en la cadena MDL, los controladores NDIS pueden llamar a las siguientes funciones:

Los controladores NDIS suelen usar los miembros MiniportReserved o ProtocolReserved de la estructura NET_BUFFER para mantener NET_BUFFER información de contexto de estructura.
Nota Solo un controlador puede usar los miembros MiniportReserved o ProtocolReserved . Por lo tanto, si otro controlador ha usado cualquiera de estos miembros, un controlador intermedio no puede usarlos.
 
Para acceder a los miembros de la estructura de NET_BUFFER, use las siguientes macros y funciones:

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

Para obtener más información sobre cómo usar búferes netos, consulte arquitectura de NET_BUFFER.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con NDIS 6.0 y versiones posteriores.
Encabezado ndis/nbl.h (include ndis.h)

Consulte también

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