EVT_UCX_ROOTHUB_GET_30PORT_INFO 콜백 함수(ucxroothub.h)
UCX가 루트 허브의 USB 3.0 포트에 대한 정보 요청을 받을 때 호출하는 클라이언트 드라이버의 구현입니다.
구문
EVT_UCX_ROOTHUB_GET_30PORT_INFO EvtUcxRoothubGet30PortInfo;
void EvtUcxRoothubGet30PortInfo(
[in] UCXROOTHUB UcxRootHub,
[in] WDFREQUEST Request
)
{...}
매개 변수
[in] UcxRootHub
루트 허브를 나타내는 UCX 개체에 대한 핸들입니다.
[in] Request
_ROOTHUB_30PORT_INFO 형식의 구조체입니다.
반환 값
없음
설명
UCX 클라이언트 드라이버는 UcxRootHubCreate 메서드를 호출하여 이 콜백 함수를 UCX(USB 호스트 컨트롤러 확장)에 등록합니다.
_ROOTHUB_30PORT_INFO 구조체의 PortInfoArray 배열에는 루트 허브에서 지원하는 USB 3.0 포트 목록이 포함되어 있습니다.
클라이언트 드라이버는 요청 및 URB 헤더의 USBD_STATUS 완료 상태 반환합니다. 드라이버는 WDFREQUEST를 비동기적으로 완료할 수 있습니다.
예제
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);
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
머리글 | ucxroothub.h(Ucxclass.h 포함) |
IRQL | DISPATCH_LEVEL |