Share via


EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY función de devolución de llamada (ucxcontroller.h)

La implementación del controlador cliente para determinar si el controlador admite una funcionalidad específica.

Sintaxis

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

Identificador del controlador UCX que el controlador cliente recibió en una llamada anterior al método UcxControllerCreate .

[in] CapabilityType

Puntero a un GUID que especifica la funcionalidad solicitada. Los posibles valores PGUID son los siguientes:

  • 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
    • En el caso de los controladores de host típicos, se debe producir un error en la consulta (STATUS_NOT_SUPPORTED). Si el controlador se ejecuta correctamente esta funcionalidad, solicita un búfer de TT claro al cancelar transferencias asincrónicas de baja velocidad/velocidad completa (masiva o control) que se han enviado a un concentrador de TT.
Consulte la sección Comentarios de USBD_QueryUsbCapability para obtener más información.

[in] OutputBufferLength

Longitud, en bytes, del búfer de salida de la solicitud, si hay disponible un búfer de salida.

[out, optional] OutputBuffer

Puntero a una ubicación que recibe la dirección del búfer. Es posible que ciertas funcionalidades necesiten proporcionar información adicional a UCX en este búfer.

[out] ResultLength

Una ubicación que, a la devolución, contiene el tamaño, en bytes, de la información que la función de devolución de llamada almacena en OutputBuffer.

Valor devuelto

Si la operación se realiza correctamente, la función de devolución de llamada debe devolver STATUS_SUCCESS u otro valor de estado para el que NT_SUCCESS(status) es igual a TRUE. De lo contrario, debe devolver un valor de estado para el que NT_SUCCESS(status) es igual a FALSE.

Código devuelto Descripción
STATUS_SUCCESS
Se admite la funcionalidad USB solicitada.
STATUS_NOT_IMPLEMENTED
La funcionalidad USB solicitada es desconocida y no se admite.
STATUS_NOT_SUPPORTED
El controlador no admite la funcionalidad USB solicitada.

Por GUID_USB_CAPABILITY_CLEAR_TT_BUFFER_ON_ASYNC_TRANSFER_CANCEL, el controlador no solicitó un búfer de TT claro al cancelar transferencias asincrónicas de baja velocidad/velocidad completa (masiva o control) enviadas a un concentrador de TT.

Comentarios

El controlador cliente UCX registra su implementación de EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY con la extensión del controlador de host USB (UCX) llamando al método UcxControllerCreate .

Ejemplos

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 Value
Plataforma de destino Windows
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado ucxcontroller.h (incluya Ucxclass.h)
IRQL PASSIVE_LEVEL

Consulte también

UcxControllerCreate