EVT_NET_ADAPTER_RETURN_RX_BUFFER função de retorno de chamada (netadapter.h)

Implemente essa função de retorno de chamada opcional para executar a limpeza em um buffer de recebimento NET_FRAGMENT para o qual você especificou anteriormente a alocação e o anexo de fragmento manual.

Sintaxe

EVT_NET_ADAPTER_RETURN_RX_BUFFER EvtNetAdapterReturnRxBuffer;

void EvtNetAdapterReturnRxBuffer(
  [_In_] NETADAPTER Adapter,
  [_In_] NET_FRAGMENT_RETURN_CONTEXT_HANDLE RxReturnContext
)
{...}

Parâmetros

[_In_] Adapter

O objeto do adaptador de rede que o cliente criou em uma chamada anterior para NetAdapterCreate.

[_In_] RxReturnContext

Um ponteiro para uma estrutura de espaço de contexto alocada pelo driver.

Retornar valor

Nenhum

Comentários

Registre sua implementação dessa função de retorno de chamada definindo o membro apropriado de NET_ADAPTER_RX_CAPABILITIES estrutura e chamando NetAdapterSetDatapathCapabilities. Os drivers de cliente normalmente chamam NetAdapterSetDatapathCapabilities ao iniciar um adaptador de rede, antes de chamar NetAdapterStart.

Essa função de retorno de chamada é opcional, a menos que o driver de cliente do adaptador de rede inicialize sua estrutura NET_ADAPTER_RX_CAPABILITIES usando a função NET_ADAPTER_RX_CAPABILITIES_INIT_DRIVER_MANAGED . Usando essa função de inicialização, o driver informa ao sistema operacional que está gerenciando a alocação e o anexo de NET_FRAGMENT receber buffers manualmente, portanto, ele deve fornecer essa função de retorno de chamada nesse caso para que o sistema operacional invoque assim que o sistema for concluído com o buffer.

Exemplo

Nessa função de retorno de chamada, o driver do cliente pode executar todas as ações de limpeza ou acompanhamento necessárias agora que o sistema operacional terminou com esse buffer de recebimento. No exemplo a seguir, o contexto de retorno contém um membro para acompanhar o número de pacotes indicados, bem como um objeto de memória usado para um buffer lookaside durante o processamento de recebimento. O tratamento de erros foi deixado de fora para maior clareza.

VOID
MyReturnRxBuffer(
	_In_	NETADAPTER							Adapter,
	_In_	NET_FRAGMENT_RETURN_CONTEXT_HANDLE	RxReturnContext
)
{
	UNREFERENCED_PARAMETER(Adapter);

	RxReturnContext->IndicatedPackets--;

	// Clean up the lookaside buffer if this is the last packet
	if(RxReturnContext->IndicatedPackets == 0)
	{
		WdfObjectDelete(RxReturnContext->LookasideBufferMemory);
	}
}

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1,25
Cabeçalho netadapter.h (inclua netadaptercx.h)
IRQL <= DISPATCH_LEVEL

Confira também

NET_ADAPTER_RX_CAPABILITIES