Compartilhar via


Estrutura NET_BUFFER

O NDIS 6.0 e estruturas NET_BUFFER posteriores são análogas às estruturas NDIS_PACKET usadas pelo NDIS 5.x e drivers anteriores. Cada estrutura NET_BUFFER empacota um pacote de dados de rede.

A figura a seguir mostra os campos em uma estrutura de NET_BUFFER.

Diagrama mostrando os campos em uma estrutura NET_BUFFER.

A estrutura NET_BUFFER inclui uma estrutura NET_BUFFER_HEADER no membro NetBufferHeader. A estrutura NET_BUFFER_HEADER inclui uma estrutura NET_BUFFER_DATA no membro NetBufferData. Você deve usar macros NDIS para acessar os membros da estrutura NET_BUFFER. Para obter uma lista completa dessas macros, consulte a página de referência da estrutura NET_BUFFER.

Alguns dos membros da estrutura NET_BUFFER são usados somente pelo NDIS. Os membros que os drivers normalmente usam são:

ProtocolReserved
Reservado para uso por controladores de protocolo.

MiniportReserved
Reservado para uso por drivers de miniporta.

NdisPoolHandle
Especifica um identificador de pool que identifica o pool NET_BUFFER a partir do qual a estrutura NET_BUFFER foi alocada.

Avançar
Especifica um ponteiro à próxima estrutura NET_BUFFER em uma lista vinculada de estruturas NET_BUFFER. Se esta for a última estrutura NET_BUFFER na lista, esse membro será NULL.

DataLength
Especifica o comprimento em bytes dos dados de rede na cadeia de MDL.

DataOffset
Especifica o deslocamento, em bytes, desde o início da memória na cadeia MDL até o início dos dados de rede na cadeia MDL.

CurrentMdl
Especifica um ponteiro ao primeiro MDL que o driver atual está usando. Este ponteiro otimiza a performance ao ignorar MDLs que o driver em uso não está utilizando.

CurrentMdlOffset
Especifica o deslocamento, em bytes, até o começo do espaço de dados usado no MDL especificado pelo membro CurrentMdl da estrutura NET_BUFFER.

A figura a seguir mostra a relação entre os membros CurrentMdl, CurrentMdlOffset, DataOffsete DataLength, e o espaço de dados.

Diagrama ilustrando a alocação de espaço de dados em relação a CurrentMdl, CurrentMdlOffset, DataOffset e DataLength.

O NDIS fornece funções para gerenciar o espaço de dados na cadeia de MDL. Como os drivers usam o espaço de dados muda dinamicamente com o driver atual. Às vezes, há espaço de dados que atualmente não é usado pelo driver atual. Embora o espaço de dados não utilizado atualmente não esteja utilizado, ele pode conter dados válidos. Por exemplo, na rota de recebimento, o espaço de dados não utilizado pode conter informações de cabeçalho usadas por um driver de nível inferior.

Os drivers executam operações de recuo e avanço para aumentar e diminuir o espaço de dados usado. Para obter mais informações sobre operações de retirada e avanço, consulte operações de retirada e avanço.

Os seguintes termos e definições descrevem elementos do espaço de dados NET_BUFFER:

Espaço de dados usado
O espaço de dados usado contém dados que o driver atual está usando no momento. s drivers aumentam o espaço de dados usado com operações de recuo e reduzem o espaço de dados utilizado com operações de avanço.

espaço de dados não utilizado
O driver atual não está usando esse espaço de dados no momento atual.

Tamanho total de dados
O tamanho total dos dados é a soma do tamanho do espaço de dados usado e espaço de dados não utilizado. Para calcular o tamanho total, adicione o DataOffset ao DataLength.

Recuo
As operações de retirada aumentam o tamanho do espaço de dados usado .

Avanço
As operações avançadas reduzem o tamanho do espaço de dados usado .