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 |