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 客户端驱动程序通过调用 UcxRootHubCreate 方法将此回调函数注册到 USB 主机控制器扩展 (UCX) 。
_ROOTHUB_INFO 结构包含根集线器支持的 USB 2.0 和 USB 3.0 端口数。
UCX 调用 EVT_UCX_ROOTHUB_GET_INFO 函数后,保证根中心公开的端口数保持不变。 请注意,这些是虚拟端口,而不是物理端口。 每个物理 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);
}
要求
要求 | 值 |
---|---|
目标平台 | Windows |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
标头 | ucxroothub.h (包括 Ucxclass.h) |
IRQL | DISPATCH_LEVEL |