Função WdfUsbTargetPipeAbortSynchronously (wdfusb.h)

[Aplica-se a KMDF e UMDF]

O método WdfUsbTargetPipeAbortSynchronously cria uma solicitação de anulação e a envia de forma síncrona para um pipe USB especificado.

Sintaxe

NTSTATUS WdfUsbTargetPipeAbortSynchronously(
  [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

WdfUsbTargetPipeAbortSynchronously retorna 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 pode retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INFO_LENGTH_MISMATCH
O tamanho da estrutura WDF_REQUEST_SEND_OPTIONS especificada pelo parâmetro RequestOptions estava incorreto.
STATUS_INVALID_PARAMETER
Um identificador inválido foi detectado.
STATUS_INSUFFICIENT_RESOURCES
Memória insuficiente disponível.
STATUS_INVALID_DEVICE_REQUEST
O IRQL do chamador não foi PASSIVE_LEVEL ou a solicitação de E/S especificada já estava na fila para um destino de E/S.
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.

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Comentários

Use o método WdfUsbTargetPipeAbortSynchronously para enviar uma solicitação de anulação USB de forma síncrona. Para enviar essas solicitações de forma assíncrona, use WdfUsbTargetPipeFormatRequestForAbort, seguido por WdfRequestSend.

Uma solicitação de anulação de USB faz com que o destino de E/S do driver cancele todas as solicitações de E/S que foram enviadas para um pipe. Quando um driver chama WdfUsbTargetPipeAbortSynchronously, a estrutura envia uma solicitação de URB_FUNCTION_ABORT_PIPE para o destino de E/S. Para obter mais informações sobre como cancelar operações em um pipe USB (também chamado de "anular um pipe"), consulte a especificação USB.

O método WdfUsbTargetPipeAbortSynchronously 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 do parâmetro RequestOptions 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 WdfUsbTargetPipeAbortSynchronously.

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.
O driver pode especificar um parâmetro RequestOptions não NULL, independentemente de o driver fornecer um parâmetro de solicitação não NULL ou NULL. 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 WdfUsbTargetPipeAbortSynchronously e destinos de E/S USB, consulte Destinos de E/S USB.

Exemplos

O exemplo de código a seguir envia solicitações de anulação para todos os pipes configurados para a interface de um dispositivo USB.

UCHAR  i;
ULONG  count;
NTSTATUS  status;
PDEVICE_CONTEXT  pDevContext;

pDevContext = GetDeviceContext(Device);

count = WdfUsbInterfaceGetNumConfiguredPipes(
                                             pDevContext->UsbInterface
                                             );

for (i = 0; i < count; i++) {
    WDFUSBPIPE pipe;

    pipe = WdfUsbInterfaceGetConfiguredPipe(
                                            pDevContext->UsbInterface,
                                            i,
                                            NULL
                                            );
    status = WdfUsbTargetPipeAbortSynchronously(
                                                pipe,
                                                WDF_NO_HANDLE,
                                                NULL
                                                );
    if (!NT_SUCCESS(status)) {
        break;
    }
}

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

WdfRequestCancelSentRequest

WdfUsbTargetPipeResetSynchronously