Função WdfUsbTargetPipeResetSynchronously (wdfusb.h)
[Aplica-se a KMDF e UMDF]
O método WdfUsbTargetPipeResetSynchronously cria uma solicitação de redefinição e a envia de forma síncrona para um pipe USB especificado.
Sintaxe
NTSTATUS WdfUsbTargetPipeResetSynchronously(
[in] WDFUSBPIPE Pipe,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);
Parâmetros
[in] Pipe
Um identificador para um objeto de pipe de estrutura que foi obtido chamando WdfUsbInterfaceGetConfiguredPipe.
[in, optional] Request
Um identificador para um objeto de solicitação de estrutura. Esse parâmetro é opcional e pode ser NULL. Para obter mais informações, consulte a seção Comentários a seguir.
[in, optional] RequestOptions
Um ponteiro para uma estrutura de WDF_REQUEST_SEND_OPTIONS alocada pelo chamador que especifica opções para a solicitação. Esse ponteiro é opcional e pode ser NULL. Para obter mais informações, consulte a seção Comentários a seguir.
Retornar valor
WdfUsbTargetPipeResetSynchronously retorna o valor status de conclusão do destino de E/S USB se a operação for bem-sucedida. Caso contrário, esse método pode retornar um dos seguintes valores:
Código de retorno | Descrição |
---|---|
|
O tamanho da estrutura WDF_REQUEST_SEND_OPTIONS especificada pelo parâmetro RequestOptions estava incorreto. |
|
Um parâmetro inválido foi detectado. |
|
Memória insuficiente disponível. |
|
O IRQL do chamador não foi PASSIVE_LEVEL ou a solicitação de E/S especificada pelo parâmetro Request já estava na fila para um destino de E/S. |
|
O driver forneceu um valor de tempo limite e a solicitação não foi concluída dentro do tempo alocado. |
|
O IRP (pacote de solicitação de E/S) que o parâmetro Request representa não fornece estruturas de IO_STACK_LOCATION suficientes para permitir que o driver encaminhe a solicitação. |
Esse método também pode retornar outros valores NTSTATUS.
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Comentários
Use o método WdfUsbTargetPipeResetSynchronously para enviar uma solicitação de redefinição de USB de forma síncrona. Para enviar essas solicitações de forma assíncrona, use WdfUsbTargetPipeFormatRequestForReset, seguido por WdfRequestSend.
Antes que a estrutura redefina o pipe USB do destino de E/S, ela cancela todas as solicitações de E/S que permanecem na fila do destino de E/S. O driver não deve enviar solicitações de E/S adicionais para o destino de E/S até que WdfUsbTargetPipeResetSynchronously retorne.
O driver deve chamar WdfIoTargetStop antes de chamar WdfUsbTargetPipeResetSynchronously. Depois que WdfUsbTargetPipeResetSynchronously retornar, o driver poderá chamar WdfIoTargetStart.
Quando um driver chama WdfUsbTargetPipeResetSynchronously, a estrutura envia uma solicitação de URB_FUNCTION_RESET_PIPE para o destino de E/S. Para obter mais informações sobre como redefinir um pipe USB, consulte a especificação USB.
O método WdfUsbTargetPipeResetSynchronously não retorna até que a solicitação seja concluída, a menos que o driver forneça um valor de tempo limite na estrutura WDF_REQUEST_SEND_OPTIONS para a qual o parâmetro RequestOptions aponta ou a menos que um erro seja detectado.
Você pode encaminhar uma solicitação de E/S recebida pelo driver em uma fila de E/S ou pode criar e enviar uma nova solicitação.
Para encaminhar uma solicitação de E/S recebida pelo driver em uma fila de E/S, especifique o identificador da solicitação recebida para o parâmetro Request do método WdfUsbTargetPipeResetSynchronously.
Para criar e enviar uma nova solicitação, forneça um identificador de solicitação NULL para o parâmetro Request ou crie um novo objeto de solicitação e forneça seu identificador:
- Se você fornecer um identificador de solicitação NULL, a estrutura usará um objeto de solicitação interno. Essa técnica é simples de usar, mas o driver não pode cancelar a solicitação.
- Se você chamar WdfRequestCreate para criar um ou mais objetos de solicitação, poderá reutilizar esses objetos de solicitação chamando WdfRequestReuse. Essa técnica permite que a função de retorno de chamada EvtDriverDeviceAdd do driver pré-alocar objetos de solicitação para um dispositivo. Além disso, outro thread de driver pode chamar WdfRequestCancelSentRequest para cancelar a solicitação, se necessário.
Para obter informações sobre como obter informações de status após a conclusão de uma solicitação de E/S, consulte Obtendo informações de conclusão.
Para obter mais informações sobre o método WdfUsbTargetPipeResetSynchronously e destinos de E/S USB, consulte Destinos de E/S USB.
Exemplos
O exemplo de código a seguir envia uma solicitação de redefinição para o pipe de um dispositivo USB.
NTSTATUS status;
status = WdfUsbTargetPipeResetSynchronously(
Pipe,
WDF_NO_HANDLE,
NULL
);
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 (include Wdfusb.h) |
Biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de