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 EvtUsbTargetPipeReadCompleteContext membro da estrutura de WDF_USB_CONTINUOUS_READER_CONFIG do pipe.
Valor de retorno
Nenhum
Observações
Para registrar uma função de retorno de chamada EvtUsbTargetPipeReadComplete, o driver deve colocar o endereço da função em uma estrutura de WDF_USB_CONTINUOUS_READER_CONFIG.
Se um driver tiver criado um leitor contínuo para um pipe USB, a estrutura chamará o driver EvtUsbTargetPipeReadComplete função de retorno de chamada sempre que o destino de E/S do driver concluir com êxito uma solicitação de leitura. 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 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 pontos para o início do cabeçalho, mas o parâmetro EvtUsbTargetPipeReadComplete NumBytesTransferred da função de retorno de chamada não incluir 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 o EvtUsbTargetPipeReadComplete e EvtUsbTargetPipeReadersFailed funções de retorno de chamada 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ários evtUsbTargetPipeReadComplete e EvtUsbTargetPipeReadersFailed funções de retorno de chamada, 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 função de retorno de chamada novamente antes que a função de retorno de chamada retorne.
- A estrutura não sincroniza essas funções de retorno de chamada com outras funções de retorno de chamada.
O driver deve chamar WdfObjectDereference quando terminar de usar o objeto de memória. Em seguida, a estrutura pode chamar o do driver EvtDestroyCallback função de retorno de chamada (se fornecido) 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 |
---|---|
da 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 (seção Consulte Comentários.) |