функция обратного вызова EVT_UCX_ROOTHUB_GET_INFO (ucxroothub.h)
Реализация драйвера клиента, вызываемая UCX при получении запроса на получение сведений о корневом концентраторе.
Синтаксис
EVT_UCX_ROOTHUB_GET_INFO EvtUcxRoothubGetInfo;
void EvtUcxRoothubGetInfo(
[in] UCXROOTHUB UcxRootHub,
[in] WDFREQUEST Request
)
{...}
Параметры
[in] UcxRootHub
Дескриптор объекта UCX, представляющий корневой концентратор.
[in] Request
Структура типа ROOTHUB_INFO.
Возвращаемое значение
Никакой
Замечания
Драйвер клиента UCX регистрирует эту функцию обратного вызова с расширением контроллера USB-узла (UCX), вызвав метод UcxRootHubCreate.
Структура _ROOTHUB_INFO содержит количество портов USB 2.0 и USB 3.0, поддерживаемых корневым концентратором.
После вызова функции EVT_UCX_ROOTHUB_GET_INFO UCX количество портов, предоставляемых корневым концентратором, гарантированно останется неизменным. Обратите внимание, что это виртуальные порты, а не физические порты. Каждый физический USB-соединитель представлен одним или несколькими портами разной скорости на корневом концентраторе.
Драйвер клиента возвращает состояние завершения запроса. Драйвер может выполнять WDFREQUEST асинхронно.
Примеры
VOID
RootHub_EvtRootHubGetInfo(
UCXROOTHUB UcxRootHub,
WDFREQUEST Request
)
/*++
For sample demonstration purposes, this function returns statically
defined information for the root hub.
--*/
{
PUCX_ROOTHUB_CONTEXT ucxRootHubContext;
WDF_REQUEST_PARAMETERS wdfRequestParams;
PROOTHUB_INFO rootHubInfo;
NTSTATUS status;
ucxRootHubContext = GetUcxRootHubContext(UcxRootHub);
WDF_REQUEST_PARAMETERS_INIT(&wdfRequestParams);
WdfRequestGetParameters(Request, &wdfRequestParams);
rootHubInfo = (PROOTHUB_INFO)wdfRequestParams.Parameters.Others.Arg1;
if (rootHubInfo->Size < sizeof(ROOTHUB_INFO)) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_INFO Size %d", rootHubInfo->Size);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGetInfo;
}
rootHubInfo->ControllerType = ControllerTypeSoftXhci;
rootHubInfo->NumberOf20Ports = ucxRootHubContext->NumberOf20Ports;
rootHubInfo->NumberOf30Ports = ucxRootHubContext->NumberOf30Ports;
rootHubInfo->MaxU1ExitLatency = ucxRootHubContext->U1DeviceExitLatency;
rootHubInfo->MaxU2ExitLatency = ucxRootHubContext->U2DeviceExitLatency;
DbgTrace(TL_INFO, RootHub, "RootHub_UcxEvtGetInfo NumberOf20Ports %d NumberOf30Ports %d", rootHubInfo->NumberOf20Ports, rootHubInfo->NumberOf30Ports);
status = STATUS_SUCCESS;
RootHub_EvtRootHubGetInfo:
WdfRequestComplete(Request, status);
}
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
минимальная версия KMDF | 1.0 |
минимальная версия UMDF | 2.0 |
заголовка | ucxroothub.h (include Ucxclass.h) |
IRQL | DISPATCH_LEVEL |