PROTOCOL_RECEIVE_NET_BUFFER_LISTS função de retorno de chamada (ndis.h)
Os processos de função ProtocolReceiveNetBufferLists recebem indicações de drivers subjacentes.
Sintaxe
PROTOCOL_RECEIVE_NET_BUFFER_LISTS ProtocolReceiveNetBufferLists;
void ProtocolReceiveNetBufferLists(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
)
{...}
Parâmetros
[in] ProtocolBindingContext
Um identificador para uma área de contexto que o driver de protocolo alocou para manter informações de estado para uma associação. Esse identificador foi passado para o NDIS em uma chamada anterior para a função NdisOpenAdapterEx.
[in] NetBufferLists
Uma lista vinculada de estruturas de NET_BUFFER_LIST que o driver subjacente alocou. Cada estrutura NET_BUFFER_LIST geralmente é associada a uma estrutura NET_BUFFER.
[in] PortNumber
Um número de porta que identifica uma porta do adaptador de miniporto. O número de porta padrão de um adaptador de miniporto é zero. Os drivers de protocolo que não usam portas de adaptador de miniporto devem ignorar esse parâmetro.
[in] NumberOfNetBufferLists
O número de estruturas de NET_BUFFER_LIST que estão na lista vinculada de estruturas em NetBufferLists .
[in] ReceiveFlags
Sinalizadores que definem atributos para a operação de envio. Os sinalizadores podem ser combinados com uma operação OR. Para limpar todos os sinalizadores, defina esse membro como zero. Essa função dá suporte aos seguintes sinalizadores:
NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL
Especifica que o IRQL atual está DISPATCH_LEVEL. Para obter mais informações sobre esse sinalizador, consulte de Acompanhamento de IRQL de Expedição.
NDIS_RECEIVE_FLAGS_RESOURCES
Especifica que o NDIS recupera a propriedade das estruturas NET_BUFFER_LIST e quaisquer estruturas de NET_BUFFER anexadas imediatamente após a chamada para ProtocolReceiveNetBufferLists retorna.
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
Especifica que todas as estruturas de NET_BUFFER_LIST na lista em NetBufferLists têm o mesmo tipo de protocolo (EtherType).
NDIS_RECEIVE_FLAGS_SINGLE_VLAN
Especifica que todas as estruturas de NET_BUFFER_LIST na lista em NetBufferLists pertencem à mesma VLAN.
NDIS_RECEIVE_FLAGS_PERFECT_FILTERED
Especifica que todas as estruturas de NET_BUFFER_LIST na lista em NetBufferLists incluem apenas dados que correspondem ao filtro de pacotes e à lista de multicast atribuídos ao adaptador de miniporto.
NDIS_RECEIVE_FLAGS_SINGLE_QUEUE
Especifica que todas as estruturas de NET_BUFFER_LIST na lista em NetBufferLists pertencem à mesma fila de VM. Um driver de miniporto deve definir esse sinalizador para todas as indicações de recebimento em uma fila se o sinalizador de NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION foi definido no Flags membro do NDIS_RECEIVE_QUEUE_PARAMETERS estrutura quando essa fila foi alocada.
NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID
Especifica que todas as estruturas de NET_BUFFER_LIST na lista em NetBufferLists contêm informações de memória compartilhadas válidas. Quando esse sinalizador é definido em um NET_BUFFER_LISTrecebido, o NDIS trata as informações de memória compartilhadas como válidas. Quando esse sinalizador não está definido, o NDIS e os drivers ignoram as informações de memória compartilhadas. Por exemplo, drivers intermediários que modificam dados de pacote podem usar esse sinalizador para determinar se os dados devem ser copiados. Os drivers de miniport podem usar o sinalizador para determinar como liberar a memória associada a uma fila de VM quando uma fila é excluída.
NDIS_RECEIVE_FLAGS_MORE_NBLS
Reservado.
Valor de retorno
Nenhum
Observações
ProtocolReceiveNetBufferLists é uma função necessária para drivers de protocolo. O NDIS chama ProtocolReceiveNetBufferLists depois que um driver de miniporto associado chama o função NdisMIndicateReceiveNetBufferLists. Uma chamada para ProtocolReceiveNetBufferLists também pode ocorrer como resultado de um loopback.
Se o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES no parâmetro ReceiveFlags não estiver definido, o driver de protocolo manterá a propriedade das estruturas de NET_BUFFER_LIST até chamar o função NdisReturnNetBufferLists.
Se o NDIS definir o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES, o driver de protocolo não poderá reter a estrutura NET_BUFFER_LIST e os recursos associados. O sinalizador de NDIS_RECEIVE_FLAGS_RESOURCES definido indica que um driver subjacente está com poucos recursos de recebimento. Nesse caso, a função ProtocolReceiveNetBufferLists deve copiar os dados recebidos no armazenamento alocado por protocolo e retornar o mais rápido possível.
Chamadas NDIS ProtocolReceiveNetBufferLists no<DO IRQL = DISPATCH_LEVEL.
exemplos de
Para definir uma função ProtocolReceiveNetBufferLists, primeiro você deve fornecer uma declaração de função que identifique o tipo de função que você está definindo. O Windows fornece um conjunto de tipos de função para drivers. Declarar uma função usando os tipos de função ajuda Análise de Código para Drivers, SDV (Verificador de Driver Estático) e outras ferramentas de verificação a encontrar erros e é um requisito para gravar drivers para o sistema operacional Windows.Por exemplo, para definir uma função ProtocolReceiveNetBufferLists denominada "MyReceiveNetBufferLists", use o tipo PROTOCOL_RECEIVE_NET_BUFFER_LISTS conforme mostrado neste exemplo de código:
PROTOCOL_RECEIVE_NET_BUFFER_LISTS MyReceiveNetBufferLists;
Em seguida, implemente sua função da seguinte maneira:
_Use_decl_annotations_
VOID
MyReceiveNetBufferLists(
NDIS_HANDLE ProtocolBindingContext,
PNET_BUFFER_LIST NetBufferLists,
NDIS_PORT_NUMBER PortNumber,
ULONG NumberOfNetBufferLists,
ULONG ReceiveFlags
)
{...}
O tipo de função PROTOCOL_RECEIVE_NET_BUFFER_LISTS é definido no arquivo de cabeçalho Ndis.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação Use_decl_annotations à sua definição de função. A anotação Use_decl_annotations garante que as anotações aplicadas ao tipo de função PROTOCOL_RECEIVE_NET_BUFFER_LISTS no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers NDIS.
Para obter informações sobre Use_decl_annotations, consulte Anotando o comportamento da função.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Com suporte no NDIS 6.0 e posterior. |
da Plataforma de Destino | Windows |
cabeçalho | ndis.h (inclua Ndis.h) |
IRQL | <= DISPATCH_LEVEL |