Função WdfUsbTargetDeviceSendUrbSynchronously (wdfusb.h)

[Aplica-se somente ao KMDF]

O método WdfUsbTargetDeviceSendUrbSynchronously envia uma solicitação USB de forma síncrona para um dispositivo USB especificado, usando parâmetros de solicitação descritos por umURB .

Sintaxe

NTSTATUS WdfUsbTargetDeviceSendUrbSynchronously(
  [in]           WDFUSBDEVICE              UsbDevice,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
  [in]           PURB                      Urb
);

Parâmetros

[in] UsbDevice

Um identificador para um objeto de dispositivo USB obtido de uma chamada anterior para WdfUsbTargetDeviceCreateWithParameters.

[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.

[in] Urb

Um ponteiro para uma estrutura de URB inicializada pelo chamador.

Se o driver chamado anteriormente WdfUsbTargetDeviceCreateWithParameters criar UsbDevice, o driver deverá usar WdfUsbTargetDeviceCreateUrb ou WdfUsbTargetDeviceCreateIsochUrb para criar essa URB.

Valor de retorno

WdfUsbTargetDeviceSendUrbSynchronously retornará o valor de status de conclusão do destino de E/S se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INVALID_PARAMETER
Um parâmetro inválido foi detectado.
STATUS_INVALID_DEVICE_REQUEST
O IRQL do chamador era inválido.
STATUS_INSUFFICIENT_RESOURCES
Memória insuficiente estava disponível.
STATUS_IO_TIMEOUT
O driver forneceu um valor de tempo limite e a solicitação não foi concluída dentro do tempo alocado.
 

Esse método também pode retornar outros valores NTSTATUS .

Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.

Observações

Use o método WdfUsbTargetDeviceSendUrbSynchronously para enviar uma solicitação de transferência de controle USB de forma síncrona. Para enviar essas solicitações de forma assíncrona, use WdfUsbTargetDeviceFormatRequestForUrb, seguido por WdfRequestSend.

O método WdfUsbTargetDeviceSendUrbSynchronously não retorna até que a solicitação seja concluída, a menos que o driver forneça um valor de tempo limite no RequestOptions estrutura WDF_REQUEST_SEND_OPTIONS do parâmetro ou a menos que um erro seja detectado.

Você pode encaminhar uma solicitação de E/S que seu driver recebeu 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 WdfUsbTargetDeviceSendUrbSynchronously parâmetro de solicitação de do método.

Para criar e enviar uma nova solicitação, forneça um identificador de solicitação NULL para o parâmetro solicitação 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, você poderá reutilizar esses objetos de solicitação chamando WdfRequestReuse. Essa técnica permite que o do driver EvtDriverDeviceAdd função de retorno de chamada para 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.
O driver pode especificar um parâmetroNULL nãoRequestOptions, independentemente de o driver fornecer uma NULL nãoou um parâmetro de solicitação deNULL . Você pode, por exemplo, usar o parâmetro RequestOptions para especificar um valor de tempo limite.

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 WdfUsbTargetDeviceSendUrbSynchronously método e destinos de E/S USB, consulte destinos de E/S USB.

Exemplos

O exemplo de código a seguir inicializa uma estrutura URB e chama WdfUsbTargetDeviceSendUrbSynchronously.

URB Urb;
NTSTATUS status;

Urb.UrbHeader.Function =  URB_FUNCTION_GET_CONFIGURATION;
Urb.UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_CONFIGURATION_REQUEST);
Urb.UrbControlGetConfigurationRequest.TransferBufferLength = 1 ; // Must be 1
Urb.UrbControlGetConfigurationRequest.TransferBufferMDL = NULL;
Urb.UrbControlGetConfigurationRequest.TransferBuffer = outBuffer;
Urb.UrbControlGetConfigurationRequest.UrbLink = NULL;

status = WdfUsbTargetDeviceSendUrbSynchronously(
                                                UsbDevice,
                                                NULL,
                                                NULL,
                                                &Urb
                                                );

Requisitos

Requisito Valor
da Plataforma de Destino Universal
versão mínima do KMDF 1.0
cabeçalho wdfusb.h (inclua Wdfusb.h)
biblioteca Wdf01000.sys (consulte o Controle de Versão da Biblioteca da Estrutura.)
IRQL PASSIVE_LEVEL
regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), SyncReqSend(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Consulte também

EvtDriverDeviceAdd

WDF_REQUEST_SEND_OPTIONS

WdfRequestCancelSentRequest

WdfRequestCreate

WdfRequestReuse

WdfRequestSend

WdfUsbTargetDeviceFormatRequestForUrb