Função NdisMIndicateReceiveNetBufferLists (ndis.h)
Os drivers de miniport chamam a função NdisMIndicateReceiveNetBufferLists para indicar o recebimento de dados da rede.
Sintaxe
void NdisMIndicateReceiveNetBufferLists(
[in] NDIS_HANDLE MiniportAdapterHandle,
PNET_BUFFER_LIST NetBufferList,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG NumberOfNetBufferLists,
[in] ULONG ReceiveFlags
);
Parâmetros
[in] MiniportAdapterHandle
O identificador de miniporta que o NDIS passou para o Função MiniportInitializeEx .
NetBufferList
Uma lista vinculada de estruturas NET_BUFFER_LIST que o driver de miniporto alocou.
[in] PortNumber
Um número de porta que identifica uma porta de adaptador de miniporta. Para atribuir um número de porta do adaptador de miniporta, chame a função NdisMAllocatePort . Um valor zero identifica a porta padrão de um adaptador de miniporta. Use a porta padrão se o driver de miniporto não tiver alocado portas para o adaptador especificado.
[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 driver de miniporto recupera a propriedade das estruturas NET_BUFFER_LIST e quaisquer estruturas NET_BUFFER anexadas imediatamente após a chamada para NdisMIndicateReceiveNetBufferLists retorna.
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).
Drivers de miniporta
NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE é opcionalmente definido por drivers de miniporta que têm certeza de que todas as NBLs em uma cadeia NBL têm o mesmo EtherType. Ao definir esse sinalizador, o driver de miniporto informa o NDIS e os protocolos de camada superior que eles não precisam examinar cada pacote para seu EtherType, o que aumenta o desempenho. Os drivers de miniporta nunca são necessários para definir esse sinalizador.
LWFs (filtros leves)
Ao indicar novos recebimentos, um LWF (filtro leve) também poderá definir NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE se tiver certeza de que todas as NBLs em uma cadeia NBL têm o mesmo EtherType. No entanto, como drivers de miniporta, as LWFs nunca são necessárias para definir esse sinalizador nesse caso e sempre podem optar por limpar o sinalizador.
Ao passar pelos recebimentos da camada inferior, se um LWF alterar o EtherType das NBLs, o LWF deverá limpar o sinalizador se as NBLs não tiverem mais o mesmo EtherType.
Ao passar pelos recebimentos da camada inferior, se um LWF alterar o EtherType das NBLs, o LWF poderá definir opcionalmente esse sinalizador se tiver certeza de que todas as NBLs em uma cadeia NBL têm o mesmo EtherType. Nesse caso, o LWF nunca é necessário para definir esse sinalizador e sempre pode optar por desmarcá-lo.
Ao consumir recebimentos da camada inferior, se esse sinalizador estiver definido, um LWF poderá assumir que cada NBL na cadeia tem o mesmo EtherType. O LWF nunca é necessário para ler esse sinalizador e, em vez disso, pode optar por sempre ler o EtherType de cada NBL.
Ao combinar várias cadeias NBL, uma LWF deve limpar esse sinalizador, a menos que seja certo que a nova cadeia NBL tenha um EtherType homogêneo.
Drivers de protocolo
Ao consumir recebimentos da camada inferior, se NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE estiver definido, o protocolo poderá assumir que cada NBL na cadeia tem o mesmo EtherType. Um protocolo nunca é necessário para ler esse sinalizador e, em vez disso, pode optar por sempre ler o EtherType de cada NBL.
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 endereços 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
Um driver de miniporto normalmente chama a função NdisMIndicateReceiveNetBufferLists de sua função MiniportInterruptDPC . Quando um driver de miniporto chama NdisMIndicateReceiveNetBufferLists, ele especifica uma lista de estruturas de NET_BUFFER_LIST no parâmetro NetBufferLists . O NDIS passa as estruturas de NET_BUFFER_LIST para o Função ProtocolReceiveNetBufferLists de drivers de protocolo associados.
Os drivers de miniport devem definir o membro SourceHandle de cada estrutura NET_BUFFER_LIST com o mesmo valor que o parâmetro MiniportAdapterHandle .
Se um driver de miniporto chamar NdisMIndicateReceiveNetBufferLists e limpar o sinalizador NDIS_RECEIVE_FLAG_RESOURCES no parâmetro ReceiveFlags , o NDIS retornará as estruturas de NET_BUFFER_LIST indicadas para o driver de miniporto Função MiniportReturnNetBufferLists . Nesse caso, o driver de miniporto não deve recuperar as estruturas de NET_BUFFER_LIST até que o NDIS retorne as estruturas de NET_BUFFER_LIST para a função MiniportReturnNetBufferLists do driver de miniport.
Se um driver de miniporto chamar NdisMIndicateReceiveNetBufferLists e definir o sinalizador NDIS_RECEIVE_FLAG_RESOURCES no parâmetro ReceiveFlags , isso indicará que o driver de miniporto deve recuperar a propriedade das estruturas NET_BUFFER_LIST imediatamente. Nesse caso, o NDIS não chama a função MiniportReturnNetBufferLists do driver de miniport para retornar as estruturas de NET_BUFFER_LIST . Em vez disso, o NDIS retorna as estruturas NET_BUFFER_LIST para o driver de miniport no retorno de NdisMIndicateReceiveNetBufferLists. O driver de miniporto deve recuperar as estruturas de NET_BUFFER_LIST imediatamente após o retorno de NdisMIndicateReceiveNetBufferLists . Para recuperar as estruturas de NET_BUFFER_LIST , um driver de miniporto pode chamar de sua própria Função MiniportReturnNetBufferLists .
Definir o sinalizador NDIS_RECEIVE_FLAG_RESOURCES no parâmetro ReceiveFlags força os drivers de protocolo a copiar os dados de rede e liberar as estruturas de NET_BUFFER_LIST para o driver de miniporto. Os gravadores de driver devem projetar seus drivers de miniporta com estruturas de NET_BUFFER_LIST pré-alocadas suficientes para evitar cópias desnecessárias.
O chamador de NdisMIndicateReceiveNetBufferLists deve inicializar corretamente as estruturas de NET_BUFFER_LIST , estruturas NET_BUFFER anexadas e quaisquer MDLs anexadas.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Com suporte no NDIS 6.0 e posterior. |
Plataforma de Destino | Universal |
Cabeçalho | ndis.h (inclua Ndis.h) |
Biblioteca | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Regras de conformidade da DDI | Irql_SendRcv_Function(ndis) |