EVT_UCX_ROOTHUB_GET_30PORT_INFO Rückruffunktion (ucxroothub.h)
Die Implementierung des Clienttreibers, die UCX aufruft, wenn sie eine Anforderung für Informationen zu USB 3.0-Ports auf dem Stammhub empfängt.
Syntax
EVT_UCX_ROOTHUB_GET_30PORT_INFO EvtUcxRoothubGet30PortInfo;
void EvtUcxRoothubGet30PortInfo(
[in] UCXROOTHUB UcxRootHub,
[in] WDFREQUEST Request
)
{...}
Parameter
[in] UcxRootHub
Ein Handle zu einem UCX-Objekt, das den Stammhub darstellt.
[in] Request
Eine Struktur vom Typ _ROOTHUB_30PORT_INFO.
Rückgabewert
Nichts
Bemerkungen
Der UCX-Clienttreiber registriert diese Rückruffunktion mit der USB-Hostcontrollererweiterung (UCX), indem die UcxRootHubCreate-Methode aufgerufen wird.
Das PortInfoArray Array der _ROOTHUB_30PORT_INFO-Struktur enthält eine Liste der USB 3.0-Ports, die der Stammhub unterstützt.
Der Clienttreiber gibt den Abschlussstatus in Anforderungs- und im USBD_STATUS im URB-Header zurück. Der Treiber kann den WDFREQUEST asynchron abschließen.
Beispiele
VOID
RootHub_EvtRootHubGet30PortInfo(
UCXROOTHUB UcxRootHub,
WDFREQUEST Request
)
/*++
For sample demonstration purposes, this function returns statically
defined information for the single 3.0 port.
--*/
{
PUCX_ROOTHUB_CONTEXT ucxRootHubContext;
WDF_REQUEST_PARAMETERS wdfRequestParams;
PROOTHUB_30PORTS_INFO rootHub30PortsInfo;
NTSTATUS status;
ucxRootHubContext = GetUcxRootHubContext(UcxRootHub);
WDF_REQUEST_PARAMETERS_INIT(&wdfRequestParams);
WdfRequestGetParameters(Request, &wdfRequestParams);
rootHub30PortsInfo = (PROOTHUB_30PORTS_INFO)wdfRequestParams.Parameters.Others.Arg1;
if (rootHub30PortsInfo->Size < sizeof(ROOTHUB_30PORTS_INFO)) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_30PORTS_INFO Size %d", rootHub30PortsInfo->Size);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGet30PortInfoEnd;
}
if (rootHub30PortsInfo->NumberOfPorts != ucxRootHubContext->NumberOf30Ports) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_30PORTS_INFO NumberOfPorts %d", rootHub30PortsInfo->NumberOfPorts);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGet30PortInfoEnd;
}
if (rootHub30PortsInfo->PortInfoSize < sizeof(ROOTHUB_30PORT_INFO)) {
DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_30PORT_INFO Size %d", rootHub30PortsInfo->PortInfoSize);
status = STATUS_INVALID_PARAMETER;
goto RootHub_EvtRootHubGet30PortInfoEnd;
}
//
// Return static root hub 3.0 port information.
//
rootHub30PortsInfo->PortInfoArray[0]->PortNumber = ROOTHUB_30_PORT_PORT_NUMBER;
rootHub30PortsInfo->PortInfoArray[0]->Removable = TriStateTrue;
status = STATUS_SUCCESS;
DbgTrace(TL_INFO, RootHub, "RootHub_EvtRootHubGet30PortInfo");
RootHub_EvtRootHubGet30PortInfoEnd:
WdfRequestComplete(Request, status);
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Fenster |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Header- | ucxroothub.h (include Ucxclass.h) |
IRQL- | DISPATCH_LEVEL |