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.
[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 |
---|---|
|
Se admite la funcionalidad USB solicitada. |
|
La funcionalidad USB solicitada es desconocida y no se admite. |
|
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 |