estrutura NET_BUFFER (ndis/nbl.h)

A estrutura NET_BUFFER especifica dados transmitidos ou recebidos pela rede.

Sintaxe

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;

Membros

Next

Um ponteiro para a próxima estrutura NET_BUFFER em uma lista vinculada de estruturas de NET_BUFFER. Se essa estrutura for a última estrutura NET_BUFFER na lista, esse membro será NULL.

CurrentMdl

Um ponteiro para o primeiro MDL que o driver atual está usando. Esse membro fornece uma otimização que melhora o desempenho ignorando quaisquer MDLs que o driver atual não esteja usando.

CurrentMdlOffset

O deslocamento, em bytes, para o início do espaço de dados usado no MDL especificado pelo membro CurrentMdl .

DataLength

O comprimento, em bytes, do espaço de dados usado na cadeia de MDL. O comprimento máximo é 0xFFFFFFFF bytes.

stDataLength

O comprimento, em bytes, do espaço de dados usado na cadeia de MDL. O comprimento máximo é 0xFFFFFFFF bytes. Esse membro é o mesmo que DataLength, mas seu tipo é SIZE_T em vez de ULONG.

MdlChain

Um ponteiro para uma lista vinculada de MDLs que mapeiam um buffer de dados. O buffer de dados armazena os dados de rede.

DataOffset

O deslocamento, em bytes, desde o início da cadeia de MDL até o início dos dados de rede na cadeia de MDL. Esse deslocamento também é o tamanho, em bytes, do espaço de dados não utilizado.

Link

Reservado para NDIS.

NetBufferHeader

Uma estrutura NET_BUFFER_HEADER . Essa é uma duplicata da união acima, por motivos de compatibilidade.

ChecksumBias

O número de bytes a serem ignoradas desde o início do buffer de dados ao calcular uma soma de verificação. Esse membro é usado pelo protocolo TCP/IP.

Reserved

Reservado para uso futuro.

NdisPoolHandle

Um identificador de pool que identifica o pool de NET_BUFFER do qual a estrutura NET_BUFFER foi alocada.

NdisReserved[2]

Reservado para NDIS.

ProtocolReserved[6]

Reservado para uso por drivers de protocolo. Os drivers de protocolo e os drivers intermediários do NDIS podem usar essa área para suas próprias finalidades. Os drivers intermediários só poderão usar esse membro se ele ainda não estiver em uso.

MiniportReserved[4]

Reservado para uso por miniportores. Os drivers de miniport e os drivers intermediários do NDIS podem usar essa área para suas próprias finalidades.

DataPhysicalAddress

Nota O nome desse membro é NdisReserved1 para drivers NDIS 6.0 e é DataPhysicalAddress para drivers NDIS 6.1 e posteriores. Para drivers NDIS 6.0, esse membro é reservado para NDIS.
 
O endereço físico da parte de dados de um quadro. Esse membro deverá ser zero se o driver que alocou NET_BUFFER não especificar o endereço. Esse membro só será válido se o sinalizador NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER ou NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD estiver definido no membro NblFlags da estrutura NET_BUFFER_LIST associada ao NET_BUFFER.
Nota Um driver de miniporte pode definir o membro DataPhysicalAddress da estrutura NET_BUFFER, mesmo que a estrutura não esteja associada a um quadro dividido. Nesse caso, DataPhysicalAddress contém o endereço físico do cabeçalho MDL.
 

SharedMemoryInfo

Um ponteiro para um NET_BUFFER_SHARED_MEMORY estrutura.

ScatterGatherList

A estrutura SCATTER_GATHER_LIST descreve uma lista de dispersão/coleta para DMA.

Comentários

Os drivers NDIS podem chamar as seguintes funções para alocar e inicializar uma estrutura de NET_BUFFER:

Os drivers NDIS podem chamar o Função NdisAllocateNetBufferListPool e, em seguida, defina o membro fAllocateNetBuffer da estrutura NET_BUFFER_LIST_POOL_PARAMETERS como TRUE ao alocar um pool de estrutura NET_BUFFER_LIST . Nesse caso, uma estrutura de NET_BUFFER é pré-alocada com cada estrutura NET_BUFFER_LIST que o driver aloca do pool.

Encadeados a cada estrutura NET_BUFFER são um ou mais descritores de buffer que mapeiam buffers que contêm dados de pacotes de rede. Esses descritores de buffer são especificados como uma cadeia de MDL no membro NetBufferHeader . Esses dados de pacote de rede foram recebidos ou serão transmitidos.

Para acessar espaço de dados adicional na cadeia de MDL, os drivers NDIS podem chamar as seguintes funções:

Normalmente, os drivers NDIS usam os membros MiniportReserved ou ProtocolReserved da estrutura NET_BUFFER para manter NET_BUFFER informações de contexto de estrutura.
Nota Somente um driver pode usar membros MiniportReserved ou ProtocolReserved . Portanto, se outro driver tiver usado um desses membros, um driver intermediário não poderá usá-los.
 
Para acessar membros da estrutura NET_BUFFER, use as seguintes macros e funções:

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 obter mais informações sobre como usar buffers de rede, consulte Arquitetura de NET_BUFFER.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Cabeçalho ndis/nbl.h (inclua ndis.h)

Confira também

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