EVT_UCX_ROOTHUB_GET_20PORT_INFO回调函数 (ucxroothub.h)
当 UCX 收到有关根中心 USB 2.0 端口的信息的请求时,UCX 调用的客户端驱动程序实现。
语法
EVT_UCX_ROOTHUB_GET_20PORT_INFO EvtUcxRoothubGet20PortInfo;
void EvtUcxRoothubGet20PortInfo(
[in] UCXROOTHUB UcxRootHub,
[in] WDFREQUEST Request
)
{...}
参数
[in] UcxRootHub
表示根中心的 UCX 对象的句柄。
[in] Request
_ROOTHUB_20PORT_INFO类型的结构。
返回值
没有
言论
UCX 客户端驱动程序通过调用 UcxRootHubCreate 方法,将此回调函数注册到 USB 主机控制器扩展 (UCX)。
_ROOTHUB_20PORTS_INFO 结构的 PortInfoArray 数组包含根中心支持的 USB 2.0 端口列表。
客户端驱动程序在 请求 和 URB 标头中的USBD_STATUS中返回完成状态。 驱动程序可以异步完成 WDFREQUEST。
例子
VOID
RootHub_EvtRootHubGet20PortInfo(
UCXROOTHUB UcxRootHub,
WDFREQUEST Request
)
/*++
For sample demonstration purposes, this function returns statically
defined information for the single 2.0 port.
--*/
{
PUCX_ROOTHUB_CONTEXT ucxRootHubContext;
WDF_REQUEST_PARAMETERS wdfRequestParams;
PROOTHUB_20PORTS_INFO rootHub20PortsInfo;
NTSTATUS status;
ucxRootHubContext = GetUcxRootHubContext(UcxRootHub);
WDF_REQUEST_PARAMETERS_INIT(&wdfRequestParams);
WdfRequestGetParameters(Request, &wdfRequestParams);
rootHub20PortsInfo = (PROOTHUB_20PORTS_INFO)wdfRequestParams.Parameters.Others.Arg1;
if (rootHub20PortsInfo->Size < sizeof(ROOTHUB_20PORTS_INFO)) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_20PORTS_INFO Size %d", rootHub20PortsInfo->Size);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGet20PortInfoEnd;
}
if (rootHub20PortsInfo->NumberOfPorts != ucxRootHubContext->NumberOf20Ports) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_20PORTS_INFO NumberOfPorts %d", rootHub20PortsInfo->NumberOfPorts);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGet20PortInfoEnd;
}
if (rootHub20PortsInfo->PortInfoSize < sizeof(ROOTHUB_20PORT_INFO)) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_20PORT_INFO Size %d", rootHub20PortsInfo->PortInfoSize);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGet20PortInfoEnd;
}
//
// Return static root hub 2.0 port information.
//
rootHub20PortsInfo->PortInfoArray[0]->PortNumber = ROOTHUB_20_PORT_PORT_NUMBER;
rootHub20PortsInfo->PortInfoArray[0]->Removable = TriStateTrue;
status = STATUS_SUCCESS;
DbgTrace(TL_INFO, RootHub, "RootHub_EvtRootHubGet20PortInfo");
RootHub_EvtRootHubGet20PortInfoEnd:
WdfRequestComplete(Request, status);
}
要求
要求 | 价值 |
---|---|
目标平台 | 窗户 |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
标头 | ucxroothub.h (包括 Ucxclass.h) |
IRQL | DISPATCH_LEVEL |