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 alocada pelo driver de protocolo 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 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 de adaptador de miniporta. O número de porta padrão de um adaptador de miniporta é zero. Os drivers de protocolo que não usam portas de adaptador de miniporta devem ignorar esse parâmetro.
[in] NumberOfNetBufferLists
O número de estruturas 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 Dispatch IRQL Tracking.
NDIS_RECEIVE_FLAGS_RESOURCES
Especifica que o NDIS recupera a propriedade das estruturas de NET_BUFFER_LIST e quaisquer estruturas de NET_BUFFER anexadas imediatamente após o retorno da chamada para ProtocolReceiveNetBufferLists .
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE
Especifica que todas as estruturas 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 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 VMs. Um driver de miniporta deve definir esse sinalizador para todas as indicações de recebimento em uma fila se o sinalizador NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION foi definido no membro Flags 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 compartilhada que são válidas. Quando esse sinalizador é definido em uma NET_BUFFER_LIST recebida, o NDIS trata as informações de memória compartilhada como válidas. Quando esse sinalizador não está definido, o NDIS e os drivers ignoram as informações de memória compartilhada. 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.
Retornar valor
Nenhum
Comentários
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.
O NDIS chama ProtocolReceiveNetBufferLists em IRQL<= DISPATCH_LEVEL.
Exemplos
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 a 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 escrever drivers para o sistema operacional Windows.Por exemplo, para definir uma função ProtocolReceiveNetBufferLists chamada "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 |
---|---|
Cliente mínimo com suporte | Com suporte no NDIS 6.0 e posterior. |
Plataforma de Destino | Windows |
Cabeçalho | ndis.h (inclua Ndis.h) |
IRQL | <= DISPATCH_LEVEL |