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)

Confira também

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists