estrutura NET_BUFFER_LIST (ndis/nbl.h)
A estrutura NET_BUFFER_LIST especifica uma lista vinculada de estruturas de NET_BUFFER.
Sintaxe
typedef struct _NET_BUFFER_LIST {
union {
struct {
NET_BUFFER_LIST *Next;
NET_BUFFER *FirstNetBuffer;
};
SLIST_HEADER Link;
NET_BUFFER_LIST_HEADER NetBufferListHeader;
};
NET_BUFFER_LIST_CONTEXT *Context;
NET_BUFFER_LIST *ParentNetBufferList;
NDIS_HANDLE NdisPoolHandle;
PVOID NdisReserved[2];
PVOID ProtocolReserved[4];
PVOID MiniportReserved[2];
PVOID Scratch;
NDIS_HANDLE SourceHandle;
ULONG NblFlags;
LONG ChildRefCount;
ULONG Flags;
union {
NDIS_STATUS Status;
ULONG NdisReserved2;
};
PVOID NetBufferListInfo[MaxNetBufferListInfo];
} NET_BUFFER_LIST, *PNET_BUFFER_LIST;
Membros
Next
O próximo NET_BUFFER_LIST estrutura na cadeia.
Os drivers não devem acessar esse membro diretamente. Em vez disso, eles devem chamar a macro NET_BUFFER_LIST_NEXT_NBL.
FirstNetBuffer
O primeiro NET_BUFFER neste NET_BUFFER_LIST.
Os drivers não devem acessar esse membro diretamente. Em vez disso, eles devem chamar a macro NET_BUFFER_LIST_FIRST_NB.
Link
Reservado para NDIS.
NetBufferListHeader
Uma estrutura NET_BUFFER_LIST_HEADER.
Context
Um ponteiro para uma estrutura de NET_BUFFER_LIST_CONTEXT. Os drivers de protocolo e de miniporto usam essa estrutura para armazenar informações sobre a estrutura de NET_BUFFER_LIST. As informações armazenadas na estrutura de NET_BUFFER_LIST_CONTEXT são opacas para o NDIS e outros drivers na pilha.
Use as seguintes funções e macros para acessar dados na estrutura NET_BUFFER_LIST_CONTEXT:
NdisAllocateNetBufferListContext NdisFreeNetBufferListContext NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZEParentNetBufferList
Se essa estrutura NET_BUFFER_LIST for um clone de outra estrutura NET_BUFFER_LIST, esse membro especifica um ponteiro para a estrutura de NET_BUFFER_LIST pai. Caso contrário, esse parâmetro será NULL. Um driver usa o função NdisAllocateCloneNetBufferList para criar um clone.
NdisPoolHandle
Um identificador de pool que identifica o pool de NET_BUFFER_LIST do qual a estrutura de NET_BUFFER_LIST foi alocada.
NdisReserved[2]
Reservado para uso pelo NDIS.
ProtocolReserved[4]
Reservado para uso por drivers de protocolo.
MiniportReserved[2]
Reservado para uso por drivers de miniporto.
Scratch
Dados definidos pelo proprietário atual da estrutura NET_BUFFER_LIST. O proprietário atual, NDIS ou um driver NDIS, pode usar esse membro para suas próprias finalidades. Quando a estrutura de NET_BUFFER_LIST é alocada inicialmente, esse membro é NULL. Depois que o proprietário atual abrir mão da propriedade, o NDIS ou outro driver poderá substituir esse membro.
SourceHandle
Um identificador que o NDIS forneceu ao driver em uma operação de associação ou anexação usando uma das seguintes rotinas fornecidas pelo driver:
Driver de miniporto
Driver de protocolo
Filtrar Driver
O NDIS usa SourceHandle para retornar a estrutura de NET_BUFFER_LIST ao driver que enviou a estrutura de NET_BUFFER_LIST.
NblFlags
Esse membro contém sinalizadores que podem ser combinados com uma operação OR bit a bit.
Use as NdisTestNblFlag, NdisTestNblFlags, NdisSetNblFlage macros NdisClearNblFlag para acessar os sinalizadores.
Drivers intermediários e drivers de filtro podem definir os sinalizadores a seguir se eles não modificarem dados associados a um NET_BUFFER_LIST. Por exemplo, se os dados não forem alterados, o NDIS poderá reutilizar as informações originais das quais o NET_BUFFER_LIST foi criado.
NDIS_NBL_FLAGS_SEND_READ_ONLY
Se definido, a estrutura NET_BUFFER_LIST e seus dados são somente leitura para operações de envio.
NDIS_NBL_FLAGS_RECV_READ_ONLY
Se definido, a estrutura NET_BUFFER_LIST e seus dados são somente leitura para operações de recebimento.
Um driver pode definir os seguintes sinalizadores mesmo que ele não divida o quadro Ethernet associado:
NDIS_NBL_FLAGS_IS_IPV4
Todos os quadros Ethernet nesta estrutura NET_BUFFER_LIST são quadros IPv4. Se esse sinalizador estiver definido, o provedor de divisão de dados de cabeçalho não deverá definir o sinalizador NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_IPV6
Todos os quadros Ethernet nesta estrutura NET_BUFFER_LIST são quadros IPv6. Se esse sinalizador estiver definido, o provedor de divisão de dados de cabeçalho não deverá definir o sinalizador de NDIS_NBL_FLAGS_IS_IPV4.
NDIS_NBL_FLAGS_IS_TCP
Todos os quadros Ethernet nesta estrutura NET_BUFFER_LIST são quadros TCP. Se esse sinalizador estiver definido, o provedor de divisão de dados de cabeçalho não deverá definir o sinalizador de NDIS_NBL_FLAGS_IS_UDP e o provedor deverá definir o sinalizador NDIS_NBL_FLAGS_IS_IPV4 ou o sinalizador NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_UDP
Todos os quadros Ethernet nesta estrutura NET_BUFFER_LIST são quadros UDP. Se esse sinalizador estiver definido, o provedor de divisão de dados de cabeçalho não deverá definir o sinalizador NDIS_NBL_FLAGS_IS_TCP e o provedor deverá definir o sinalizador de NDIS_NBL_FLAGS_IS_IPV4 ou o sinalizador NDIS_NBL_FLAGS_IS_IPV6.
NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET
Todos os pacotes associados a essa estrutura NET_BUFFER_LIST são pacotes de loopback.
Se o provedor de divisão de dados de cabeçalho não dividir o quadro Ethernet associado, o driver de miniporto deverá indicar a estrutura NET_BUFFER_LIST com os seguintes sinalizadores limpos:
NDIS_NBL_FLAGS_HD_SPLIT
O cabeçalho e os dados são divididos em todos os quadros Ethernet associados a essa estrutura NET_BUFFER_LIST.
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER
Todos os quadros Ethernet neste NET_BUFFER_LIST são divididos no início do cabeçalho do protocolo de camada superior. Se esse sinalizador estiver definido, o provedor de divisão de dados de cabeçalho deverá definir o sinalizador NDIS_NBL_FLAGS_IS_IPV4 ou o sinalizador NDIS_NBL_FLAGS_IS_IPV6. Além disso, o provedor pode definir o sinalizador NDIS_NBL_FLAGS_IS_TCP ou o sinalizador NDIS_NBL_FLAGS_IS_UDP, mas o provedor não deve definir o sinalizador NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD.
NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD
Todos os quadros Ethernet nesta estrutura NET_BUFFER_LIST são divididos no início do conteúdo TCP ou UDP. Se esse sinalizador estiver definido, o provedor de divisão de dados de cabeçalho deverá definir o sinalizador NDIS_NBL_FLAGS_IS_IPV4 ou o sinalizador NDIS_NBL_FLAGS_IS_IPV6. Além disso, o provedor deve definir o sinalizador NDIS_NBL_FLAGS_IS_TCP ou o sinalizador de NDIS_NBL_FLAGS_IS_UDP, mas o provedor não deve definir o sinalizador NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER.
ChildRefCount
Se essa estrutura NET_BUFFER_LIST tiver clones (é pai), esse membro especifica o número de clones pendentes. Caso contrário, esse membro será zero.
Flags
Atributos da estrutura NET_BUFFER_LIST. As definições a seguir especificam uma máscara de bits para um conjunto de sinalizadores:
NBL_FLAGS_PROTOCOL_RESERVED
Esse conjunto é reservado para drivers de protocolo.
NBL_FLAGS_MINIPORT_RESERVED
Esse conjunto é reservado para drivers de miniporto.
NBL_FLAGS_SCRATCH
O proprietário atual da estrutura NET_BUFFER_LIST, NDIS ou um driver NDIS, pode usar esse conjunto. Quando o proprietário atual abre mão da propriedade, o NDIS ou outro driver pode substituir esses sinalizadores.
NBL_FLAGS_NDIS_RESERVED
Esse conjunto é reservado para NDIS.
Status
O status final de conclusão de uma operação de dados de rede nesta estrutura NET_BUFFER_LIST. Os drivers de miniporto gravam esse valor antes de chamar o função de NdisMSendNetBufferListsComplete. Os drivers de miniporto especificam um dos seguintes valores:
NDIS_STATUS_SUCCESS
Todos os dados de rede descritos por NET_BUFFER estruturas associadas a essa estrutura NET_BUFFER_LIST foram transmitidos com êxito pela rede.
NDIS_STATUS_INVALID_LENGTH
O tamanho dos dados em algumas estruturas NET_BUFFER associadas a essa estrutura NET_BUFFER_LIST era muito grande para a NIC subjacente.
NDIS_STATUS_RESOURCES
A solicitação de envio para essa estrutura de NET_BUFFER_LIST falhou devido a recursos insuficientes.
NDIS_STATUS_FAILURE
Essa solicitação de envio para essa estrutura de NET_BUFFER_LIST falhou devido a algum motivo diferente daqueles indicados nos três valores anteriores.
NDIS_STATUS_SEND_ABORTED
O NDIS chamou a função MiniportCancelSend para cancelar a operação de envio dessa estrutura de NET_BUFFER_LIST.
NDIS_STATUS_RESET_IN_PROGRESS
O driver de miniporto anulou a solicitação de envio devido a uma redefinição.
NDIS_STATUS_PAUSED
Se um driver precisar rejeitar as solicitações de envio porque ele está em pausa, ele define o status completo em cada NET_BUFFER_LIST afetado como NDIS_STATUS_PAUSED.
NdisReserved2
Reservado para NDIS.
NetBufferListInfo[MaxNetBufferListInfo]
Uma matriz de valores que contém informações comuns a todas as estruturas NET_BUFFER na lista. Essas informações geralmente são conhecidas como "dados fora de banda (OOB)".
Usar o NDIS_NET_BUFFER_LIST_INFO valores de enumeração com a macro NET_BUFFER_LIST_INFO para definir e obter valores na matriz NetBufferListInfo.
Observações
Os drivers NDIS podem chamar qualquer uma das seguintes funções para alocar e inicializar uma estrutura de NET_BUFFER_LIST:
NdisAllocateNetBufferAndNetBufferList NdisAllocateCloneNetBufferList NdisAllocateFragmentNetBufferList NdisAllocateReassembledNetBufferListTodas as estruturas NET_BUFFER associadas a uma estrutura de NET_BUFFER_LIST têm os atributos especificados pelos membros NetBufferListInfo e Context.
Quando um driver chama a função NdisSendNetBufferLists ou NdisFSendNetBufferLists, ele perde a propriedade de:
- A estrutura de NET_BUFFER_LIST especificada.
- As estruturas NET_BUFFER anexadas e MDLs.
- Qualquer NDIS_REQUEST_CONTROLs anexada.
- Todos os dados NetBufferListInfo que estão associados à estrutura NET_BUFFER_LIST.
Uma lista de estruturas de NET_BUFFER_LIST é uma lista simples vinculada e terminada por NULL. Para mover uma estrutura de NET_BUFFER_LIST para uma lista diferente, faça atualizações apropriadas para os membros do Next nas listas de origem e de destino.
Para acessar membros da estrutura NET_BUFFER_LIST, use as seguintes macros e funções:
NET_BUFFER_LIST_MINIPORT_RESERVED NET_BUFFER_LIST_CONTEXT_DATA_START NET_BUFFER_LIST_CONTEXT_DATA_SIZE NET_BUFFER_LIST_PROTOCOL_RESERVED NdisGetPoolFromNetBufferListPara obter mais informações sobre como usar buffers de rede, consulte NET_BUFFER Arquitetura.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Com suporte no NDIS 6.0 e posterior. |
cabeçalho | ndis/nbl.h (inclua ndis.h) |