EVT_WDF_USB_READER_COMPLETION_ROUTINE função de retorno de chamada (wdfusb.h)
[Aplica-se a KMDF e UMDF]
A função de retorno de chamada de evento EvtUsbTargetPipeReadComplete de um driver informa ao driver que um leitor contínuo concluiu com êxito uma solicitação de leitura.
Sintaxe
EVT_WDF_USB_READER_COMPLETION_ROUTINE EvtWdfUsbReaderCompletionRoutine;
void EvtWdfUsbReaderCompletionRoutine(
[in] WDFUSBPIPE Pipe,
[in] WDFMEMORY Buffer,
[in] size_t NumBytesTransferred,
[in] WDFCONTEXT Context
)
{...}
Parâmetros
[in] Pipe
Um identificador para um objeto de pipe de estrutura.
[in] Buffer
Um identificador para um objeto de memória de estrutura que representa um buffer que contém dados do dispositivo.
[in] NumBytesTransferred
O número de bytes de dados que estão no buffer de leitura.
[in] Context
Informações de contexto definidas pelo driver especificadas no membro EvtUsbTargetPipeReadCompleteContext da estrutura de WDF_USB_CONTINUOUS_READER_CONFIG do pipe.
Retornar valor
Nenhum
Comentários
Para registrar uma função de retorno de chamada EvtUsbTargetPipeReadComplete , o driver deve colocar o endereço da função em uma estrutura WDF_USB_CONTINUOUS_READER_CONFIG .
Se um driver tiver criado um leitor contínuo para um pipe USB, a estrutura chamará a função de retorno de chamada EvtUsbTargetPipeReadComplete do driver sempre que o destino de E/S do driver concluir uma solicitação de leitura com êxito. A função de retorno de chamada é chamada no IRQL no qual o destino de E/S concluiu a solicitação de leitura, que normalmente é IRQL = DISPATCH_LEVEL, mas não superior a DISPATCH_LEVEL. (Se o destino de E/S não concluir uma solicitação com êxito, a estrutura chamará a função de retorno de chamada EvtUsbTargetPipeReadersFailed do driver.)
Para acessar o buffer que contém dados que foram lidos do dispositivo, o driver pode chamar WdfMemoryGetBuffer. A estrutura grava os dados no buffer, após o cabeçalho definido pelo membro HeaderLength da estrutura WDF_USB_CONTINUOUS_READER_CONFIG . Observe que o ponteiro que WdfMemoryGetBuffer retorna aponta para o início do cabeçalho, mas o parâmetro NumBytesTransferred da função de retorno de chamada EvtUsbTargetPipeReadCompletenão inclui o comprimento do cabeçalho.
Por padrão, a estrutura exclui o objeto de memória do buffer após o retorno da função de retorno de chamada EvtUsbTargetPipeReadComplete . 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 identificador de objeto 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 passar o identificador do objeto de memória para WdfObjectReference. Posteriormente, o driver deve chamar WdfObjectDereference para que a estrutura possa excluir o objeto.
A estrutura sincroniza chamadas para as funções de retorno de chamada EvtUsbTargetPipeReadComplete e EvtUsbTargetPipeReadersFailed 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 EvtUsbTargetPipeReadComplete e EvtUsbTargetPipeReadersFailed , as várias funções de retorno de chamada poderão ser executadas simultaneamente.
- Se o driver tiver especificado o valor padrão NumPendingReads ou um valor maior que 1 e se uma solicitação de leitura for concluída enquanto a função de retorno de chamada EvtUsbTargetPipeReadComplete estiver sendo executada, a estrutura poderá chamar a função de retorno de chamada EvtUsbTargetPipeReadComplete 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.
O driver deve chamar WdfObjectDereference quando terminar de usar o objeto de memória. Em seguida, a estrutura pode chamar a função de retorno de chamada EvtDestroyCallback do driver (se fornecida) e excluir o objeto de memória.
Para obter mais informações sobre a função de retorno de chamada EvtUsbTargetPipeReadComplete e destinos de E/S USB, consulte Destinos de E/S USB.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | wdfusb.h (inclua Wdf.h) |
IRQL | <=DISPATCH_LEVEL (consulte a seção Comentários.) |