Compartilhar via


Método IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion (wudfusb.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]

A função de retorno de chamada de evento OnReaderCompletion de um driver informa ao driver que um leitor contínuo concluiu com êxito uma solicitação de leitura.

Sintaxe

void OnReaderCompletion(
  [in] IWDFUsbTargetPipe *pPipe,
  [in] IWDFMemory        *pMemory,
  [in] SIZE_T            NumBytesTransferred,
  [in] PVOID             Context
);

Parâmetros

[in] pPipe

Um ponteiro para a interface IWDFUsbTargetPipe para o pipe USB no qual o driver habilitou um leitor contínuo.

[in] pMemory

Um ponteiro para a interface IWDFMemory para um buffer de leitura que contém dados que foram lidos do pipe USB.

[in] NumBytesTransferred

O número de bytes que o buffer de leitura contém.

[in] Context

Um ponteiro para informações de contexto fornecidas pelo driver que o driver forneceu quando anteriormente chamou IWDFUsbTargetPipe2::ConfigureContinuousReader.

Retornar valor

Nenhum

Comentários

Para registrar uma função de retorno de chamada IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion , seu driver deve fornecer um ponteiro para a interface IUsbTargetPipeContinuousReaderCallbackReadComplete do driver ao chamar IWDFUsbTargetPipe2::ConfigureContinuousReader.

Se um driver tiver criado um leitor contínuo para um pipe USB, a estrutura chamará a função de retorno de chamada OnReaderCompletion do driver sempre que o destino de E/S do driver concluir com êxito uma solicitação de leitura. Se o destino de E/S não concluir uma solicitação com êxito, a estrutura chamará a função de retorno de chamada IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure do driver.

Para acessar o buffer que contém dados que foram lidos do dispositivo, o driver pode chamar IWDFMemory::GetDataBuffer. A estrutura grava os dados no buffer, após o cabeçalho definido pelo parâmetro HeaderLength de IWDFUsbTargetPipe2::ConfigureContinuousReader. Observe que o ponteiro que IWDFMemory::GetDataBuffer retorna pontos para o início do cabeçalho, mas o parâmetro NumBytesTransferred da função de retorno de chamada OnReaderCompletion não inclui o comprimento do cabeçalho.

Por padrão, a estrutura exclui o objeto de memória do buffer depois que a função de retorno de chamada OnReaderCompletion retorna. No entanto, talvez você queira que o objeto de memória permaneça válido depois que a função de retorno de chamada retornar. Por exemplo, talvez você queira que o driver armazene o ponteiro da interface do objeto de memória no espaço de contexto do objeto de pipe da estrutura para que o driver possa processar o conteúdo do objeto de memória após o retorno da função de retorno de chamada. Para estender o tempo de vida do objeto de memória, a função de retorno de chamada deve chamar o método IWDFMemory::AddRef do buffer. Posteriormente, o driver deve chamar o método IWDFMemory::Release do buffer para que a estrutura possa excluir o objeto.

A estrutura sincroniza chamadas para as funções de retorno de chamada OnReaderCompletion e IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure de acordo com as seguintes regras:

  • Essas funções de retorno de chamada não são executadas simultaneamente para um pipe USB individual.
  • Se o driver criar vários leitores contínuos para vários pipes USB, com várias funções de retorno de chamada OnReaderCompletion e OnReaderFailure , as várias funções de retorno de chamada poderão ser executadas simultaneamente.
  • Se o driver tiver especificado o valor padrão NumPendingReads ao chamar IWDFUsbTargetPipe2::ConfigureContinuousReader (ou se ele especificar qualquer valor NumPendingReads maior que 1) e se uma solicitação de leitura for concluída enquanto a função de retorno de chamada OnReaderCompletion estiver sendo executada, a estrutura poderá chamar a função de retorno de chamada OnReaderCompletion novamente antes que a função de retorno de chamada retorne.
  • A estrutura não sincroniza essas funções de retorno de chamada com nenhuma outra função de retorno de chamada.
Quando o driver chama IWDFUsbTargetPipe2::ConfigureContinuousReader, ele pode especificar uma função de retorno de chamada IObjectCleanup::OnCleanup . A estrutura chamará essa função de retorno de chamada quando tentar excluir o objeto de memória, depois que a função de retorno de chamada OnReaderCompletion retornar.

Para obter mais informações sobre a função de retorno de chamada OnReaderCompletion e destinos de E/S USB, consulte Manipulando um destino de E/S USB.

Requisitos

Requisito Valor
Fim do suporte Indisponível no UMDF 2.0 e posterior.
Plataforma de Destino Área de Trabalho
Versão mínima do UMDF 1,9
Cabeçalho wudfusb.h (inclua Wudfusb.h)

Confira também

IUsbTargetPipeContinuousReaderCallbackReadComplete

IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure