EVT_UCX_ROOTHUB_GET_20PORT_INFO función de devolución de llamada (ucxroothub.h)
La implementación del controlador cliente que UCX llama cuando recibe una solicitud de información sobre los puertos USB 2.0 en el concentrador raíz.
Sintaxis
EVT_UCX_ROOTHUB_GET_20PORT_INFO EvtUcxRoothubGet20PortInfo;
void EvtUcxRoothubGet20PortInfo(
[in] UCXROOTHUB UcxRootHub,
[in] WDFREQUEST Request
)
{...}
Parámetros
[in] UcxRootHub
Identificador de un objeto UCX que representa el centro raíz.
[in] Request
Estructura de tipo _ROOTHUB_20PORT_INFO.
Valor devuelto
None
Observaciones
El controlador cliente UCX registra esta función de devolución de llamada con la extensión del controlador de host USB (UCX) llamando al método UcxRootHubCreate .
La matriz PortInfoArray de la estructura _ROOTHUB_20PORTS_INFO contiene una lista de puertos USB 2.0 que admite el concentrador raíz.
El controlador cliente devuelve el estado de finalización en Solicitud y en el USBD_STATUS en el encabezado URB. El controlador puede completar WDFREQUEST de forma asincrónica.
Ejemplos
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);
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | ucxroothub.h (incluya Ucxclass.h) |
IRQL | DISPATCH_LEVEL |