Compartilhar via


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.

Valor de retorno

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 poderá retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INFO_LENGTH_MISMATCH
O tamanho da estrutura de WDF_REQUEST_SEND_OPTIONS que o parâmetro RequestOptions especificado estava incorreto.
STATUS_INVALID_PARAMETER
Um identificador inválido foi detectado.
STATUS_INSUFFICIENT_RESOURCES
Memória insuficiente estava 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 .

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

Observações

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 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 "anulação de 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 WDF_REQUEST_SEND_OPTIONS do RequestOption s 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 WdfUsbTargetPipeAbortSynchronously 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 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
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 Wdfusb.h)
biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
regras de conformidade de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestforUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Consulte também

WdfRequestCancelSentRequest

WdfUsbTargetPipeResetSynchronously