IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME IOCTL(usbioctl.h)

IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME I/O 요청은 버스 드라이버에 USB 호스트 컨트롤러의 디바이스 이름을 쿼리합니다.

IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME 커널 모드 I/O 제어 요청입니다. 이 요청은 USB 허브 PDO를 대상으로 합니다. 이 요청은 PASSIVE_LEVEL IRQL로 보내야 합니다.

주 코드

IRP_MJ_INTERNAL_DEVICE_CONTROL

입력 버퍼

Parameters.Others.Argument1 은 호스트 컨트롤러의 이름으로 채워질 USB_HUB_NAME 구조체에 대한 포인터여야 합니다.

입력 버퍼 길이

Parameters.Others.Argument2Parameters.Others.Argument1에서 버퍼의 길이(바이트)를 지정하는 ULONG이어야 합니다.

출력 버퍼

버스 드라이버는 Parameters.Others.Argument1 이 가리키는 버퍼를 호스트 컨트롤러 디바이스 이름으로 채웁니다.

출력 버퍼 길이

Parameters.Others.Argument2에 지정된 길이까지만 채워집니다.

상태 블록

버스 또는 포트 드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정하거나 적절한 오류 상태.

설명

호출자는 USB_HUB_NAME 구조를 보유할 수 있을 만큼 큰 버퍼를 제공해야 합니다. Parameters.Others.Argument2 값은 해당 버퍼의 크기를 나타냅니다. 성공적으로 완료되면 USB_HUB_NAMEHubName 멤버에 컨트롤러 이름이 포함되고 ActualLength 멤버는 컨트롤러 이름 문자열의 길이를 나타냅니다. ActualLength는 전체 USB_HUB_NAME 구조체의 크기를 나타내지 않습니다. Parameters.Others.Argument1에 제공된 버퍼가 문자열을 보유할 만큼 크지 않으면 HubName 값에 잘린 문자열이 표시될 수 있습니다.

문자열을 보유하는 데 필요한 버퍼의 크기를 가져오려면 요청을 두 번 보냅니다. 첫 번째 요청에서 바이트 이상 sizeof(USB_HUB_NAME) 인 버퍼를 지정합니다. 그렇지 않으면 ActualLength 는 문자열의 올바른 길이를 나타내지 않으며 요청은 STATUS_BUFFER_TOO_SMALL 실패합니다.

첫 번째 요청이 성공적으로 완료되면 바이트 버퍼 ActualLength + sizeof(ULONG) 를 할당하고 요청을 다시 보냅니다. 요청이 완료되면 HubName 은 전체 컨트롤러 이름 문자열을 나타냅니다.

요구 사항

요구 사항
헤더 usbioctl.h

추가 정보

USB_HUB_NAME