Compartilhar via


PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS função de retorno de chamada (ndis.h)

Os processos de função ProtocolCoReceiveNetBufferLists recebem indicações de drivers subjacentes.

Nota Você deve declarar a função usando o tipo PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS . Para obter mais informações, consulte a seção Exemplos a seguir.
 

Sintaxe

PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS ProtocolCoReceiveNetBufferLists;

void ProtocolCoReceiveNetBufferLists(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [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 NdisOpenAdapterEx.

[in] ProtocolVcContext

Um identificador para uma área de contexto alocada pelo driver de protocolo na qual esse driver mantém as informações de estado de tempo de execução por conexão virtual (VC). Um cliente ou um gerenciador de chamadas autônomo forneceu esse identificador quando chamou a função NdisCoCreateVc ou de sua função ProtocolCoCreateVc .

[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] NumberOfNetBufferLists

O número de estruturas NET_BUFFER_LIST que estão na lista vinculada de estruturas especificadas pelo NetBufferLists .

[in] ReceiveFlags

Sinalizadores que definem atributos para a operação de envio. Os sinalizadores podem ser combinados com uma operação OR bit a bit. Para limpar todos os sinalizadores, defina esse parâmetro como zero. ProtocolCoReceiveNetBufferLists dá suporte aos seguintes sinalizadores:

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

O IRQL atual é DISPATCH_LEVEL. Para obter mais informações sobre esse sinalizador, consulte Dispatch IRQL Tracking.

NDIS_RECEIVE_FLAGS_RESOURCES

O NDIS recupera a propriedade das estruturas NET_BUFFER_LIST e quaisquer estruturas NET_BUFFER anexadas imediatamente após o retorno da chamada para ProtocolCoReceiveNetBufferLists .

Retornar valor

Nenhum

Comentários

A função ProtocolCoReceiveNetBufferLists é necessária para drivers de protocolo CoNDIS. O NDIS chama ProtocolCoReceiveNetBufferLists depois que um driver de miniporto associado chama o Função NdisMCoIndicateReceiveNetBufferLists . Uma chamada para ProtocolCoReceiveNetBufferLists também pode ocorrer como resultado de um loopback.

Se o sinalizador NDIS_RECEIVE_FLAGS_RESOURCES no parâmetro CoReceiveFlags 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. NDIS_RECEIVE_FLAGS_RESOURCES indica que um driver subjacente tem poucos recursos de recebimento. Nesse caso, a função ProtocolCoReceiveNetBufferLists deve copiar os dados recebidos no armazenamento alocado por protocolo e retornar o mais rápido possível.

Em um sistema multiprocessador, ProtocolCoReceiveNetBufferLists pode ser executado simultaneamente em mais de um processador. Nessa situação, aplique proteção (por exemplo, use bloqueios de rotação) a estruturas de dados críticas acessadas por ProtocolCoReceiveNetBufferLists .

O NDIS chama ProtocolCoReceiveNetBufferLists em IRQL<= DISPATCH_LEVEL.

Exemplos

Para definir uma função ProtocolCoReceiveNetBufferLists , 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 ProtocolCoReceiveNetBufferLists chamada "MyCoReceiveNetBufferLists", use o tipo PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS conforme mostrado neste exemplo de código:

PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS MyCoReceiveNetBufferLists;

Em seguida, implemente sua função da seguinte maneira:

_Use_decl_annotations_
VOID
 MyCoReceiveNetBufferLists(
    NDIS_HANDLE  ProtocolBindingContext,
    NDIS_HANDLE  ProtocolVcContext,
    INPNET_BUFFER_LIST  NetBufferLists,
    ULONG  NumberOfNetBufferLists,
    ULONG  ReceiveFlags
    )
  {...}

O tipo de função PROTOCOL_CO_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_CO_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

Confira também

Funções de envio e recebimento do driver de protocolo CoNDIS

MiniportReturnNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisCoCreateVc

NdisMCoIndicateReceiveNetBufferLists

NdisOpenAdapterEx

NdisReturnNetBufferLists

ProtocolCoCreateVc

ProtocolCoSendNetBufferListsComplete