Compartilhar via


função de retorno de chamada EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY (ucxcontroller.h)

A implementação do driver cliente para determinar se o controlador dá suporte a uma funcionalidade específica.

Sintaxe

EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY EvtUcxControllerQueryUsbCapability;

NTSTATUS EvtUcxControllerQueryUsbCapability(
  [in]            UCXCONTROLLER UcxController,
  [in]            PGUID CapabilityType,
  [in]            ULONG OutputBufferLength,
  [out, optional] PVOID OutputBuffer,
  [out]           PULONG ResultLength
)
{...}

Parâmetros

[in] UcxController

Um identificador para o controlador UCX que o driver cliente recebeu em uma chamada anterior para o método UcxControllerCreate .

[in] CapabilityType

Ponteiro para um GUID que especifica o recurso solicitado. Os possíveis valores PGUID são os seguintes:

  • GUID_USB_CAPABILITY_CHAINED_MDLS
  • GUID_USB_CAPABILITY_STATIC_STREAMS
  • GUID_USB_CAPABILITY_SELECTIVE_SUSPEND
  • GUID_USB_CAPABILITY_FUNCTION_SUSPEND
  • GUID_USB_CAPABILITY_DEVICE_CONNECTION_HIGH_SPEED_COMPATIBLE
  • GUID_USB_CAPABILITY_DEVICE_CONNECTION_SUPER_SPEED_COMPATIBLE
  • GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL
    • Para controladores de host típicos, a consulta deve falhar (STATUS_NOT_SUPPORTED). Se o controlador tiver êxito nessa funcionalidade, ele solicitará um Buffer TT Claro ao cancelar transferências assíncronas de baixa velocidade/velocidade total (em massa ou controle) que foram enviadas para um hub TT.
Consulte a seção Comentários do USBD_QueryUsbCapability para obter mais informações.

[in] OutputBufferLength

O comprimento, em bytes, do buffer de saída da solicitação, se um buffer de saída estiver disponível.

[out, optional] OutputBuffer

Um ponteiro para um local que recebe o endereço do buffer. Alguns recursos podem precisar fornecer informações adicionais ao UCX nesse buffer.

[out] ResultLength

Um local que, no retorno, contém o tamanho, em bytes, das informações armazenadas na função de retorno de chamada no OutputBuffer.

Retornar valor

Se a operação for bem-sucedida, a função de retorno de chamada deverá retornar STATUS_SUCCESS ou outro valor status para o qual NT_SUCCESS(status) é igual a TRUE. Caso contrário, ele deverá retornar um valor status para o qual NT_SUCCESS(status) é igual a FALSE.

Código de retorno Descrição
STATUS_SUCCESS
Há suporte para a funcionalidade USB solicitada.
STATUS_NOT_IMPLEMENTED
A funcionalidade USB solicitada é desconhecida e não tem suporte.
STATUS_NOT_SUPPORTED
O controlador não dá suporte à funcionalidade USB solicitada.

Para GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL, o controlador não solicitou um Buffer TT Claro ao cancelar transferências assíncronas de baixa velocidade/velocidade total (em massa ou controle) que foram enviadas para um hub TT.

Comentários

O driver cliente UCX registra sua implementação de EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY com a UCX (extensão do controlador de host USB) chamando o método UcxControllerCreate .

Exemplos

NTSTATUS
Controller_EvtControllerQueryUsbCapability(
    UCXCONTROLLER   UcxController,
    PGUID           CapabilityType,
    ULONG           OutputBufferLength,
    PVOID           OutputBuffer,
    PULONG          ResultLength
)

{
    NTSTATUS status;

    UNREFERENCED_PARAMETER(UcxController);
    UNREFERENCED_PARAMETER(OutputBufferLength);
    UNREFERENCED_PARAMETER(OutputBuffer);

    *ResultLength = 0;

    if (RtlCompareMemory(CapabilityType,
                         &GUID_USB_CAPABILITY_CHAINED_MDLS,
                         sizeof(GUID)) == sizeof(GUID)) {

        //
        // TODO: Is GUID_USB_CAPABILITY_CHAINED_MDLS supported?
        //
        DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_CHAINED_MDLS not supported");
        status = STATUS_NOT_SUPPORTED;
    }
    else if (RtlCompareMemory(CapabilityType,
                              &GUID_USB_CAPABILITY_STATIC_STREAMS,
                              sizeof(GUID)) == sizeof(GUID)) {

        //
        // TODO: Is GUID_USB_CAPABILITY_STATIC_STREAMS supported?
        //
        DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_STATIC_STREAMS supported");
        status = STATUS_NOT_SUPPORTED;
    }
    else if (RtlCompareMemory(CapabilityType,
                              &GUID_USB_CAPABILITY_FUNCTION_SUSPEND,
                              sizeof(GUID)) == sizeof(GUID)) {

        //
        // TODO: Is GUID_USB_CAPABILITY_FUNCTION_SUSPEND supported?
        //
        DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_FUNCTION_SUSPEND not supported");
        status = STATUS_NOT_SUPPORTED;
    }
    else if (RtlCompareMemory(CapabilityType,
                              &GUID_USB_CAPABILITY_SELECTIVE_SUSPEND,
                              sizeof(GUID)) == sizeof(GUID)) {

        DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_SELECTIVE_SUSPEND supported");
        status = STATUS_SUCCESS;
    }
    else if (RtlCompareMemory(CapabilityType,
                              &GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL,
                              sizeof(GUID)) == sizeof(GUID)) {

        //
        // TODO: Is GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL supported?
        //
        DbgTrace(TL_INFO, Controller, "GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL not supported");
        status = STATUS_NOT_SUPPORTED;
    }
    else {
        DbgTrace(TL_INFO, Controller, "Unhandled USB capability");
        status = STATUS_NOT_IMPLEMENTED;
    }

    return status;
}

Requisitos

Requisito Valor
Plataforma de Destino Windows
Versão mínima do KMDF 1.0
Versão mínima do UMDF 2,0
Cabeçalho ucxcontroller.h (inclua Ucxclass.h)
IRQL PASSIVE_LEVEL

Confira também

UcxControllerCreate