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.
[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 |
---|---|
|
Há suporte para a funcionalidade USB solicitada. |
|
A funcionalidade USB solicitada é desconhecida e não tem suporte. |
|
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 |