IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL(usbioctl.h)
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX 요청은 USB 포트 및 포트에 연결된 디바이스(있는 경우)에 대한 정보를 검색합니다.
클라이언트 드라이버는 PASSIVE_LEVEL IRQL에서 이 IOCTL을 보내야 합니다.
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX 사용자 모드 I/O 제어 요청입니다. 이 요청은 USB 허브 디바이스(GUID_DEVINTERFACE_USB_HUB)를 대상으로 합니다.
주 코드
입력/출력 버퍼
입력 버퍼와 출력 버퍼는 모두 호출자가 할당한 USB_NODE_CONNECTION_INFORMATION_EX 구조를 가리킵니다. 입력에서 이 구조체의 ConnectionIndex 멤버는 연결 정보를 보고할 포트 수를 나타내는 1보다 크거나 같은 숫자를 포함해야 합니다. 허브 드라이버는 USB_NODE_CONNECTION_INFORMATION_EX 나머지 멤버의 연결 정보를 반환합니다. IRP, AssociatedIrp.SystemBuffer 멤버는 USB_NODE_CONNECTION_INFORMATION_EX 구조를 가리킵니다.
출력 시 USB_NODE_CONNECTION_INFORMATION_EX 구조는 USB 허브 드라이버에서 표시된 연결에 대한 정보를 받습니다.
입력/출력 버퍼 길이
USB_NODE_CONNECTION_INFORMATION_EX 구조체의 크기입니다.
상태 블록
USB 스택은 요청이 성공하면 Irp-IoStatus.Status>를 STATUS_SUCCESS 설정합니다. 그렇지 않으면 USB 스택이 상태를 STATUS_INVALID_PARAMETER 또는 STATUS_INSUFFICIENT_RESOURCES 같은 적절한 오류 조건으로 설정합니다.
설명
다음은 이 요청을 전송하여 허브 포트의 속도를 가져오는 방법을 보여 주는 예제입니다.
함수는 쿼리할 허브 디바이스 및 포트 인덱스에 대한 기호 링크를 지정합니다. 반환될 때 pPortSpeed는 다음을 나타냅니다.
- 포트 속도
- SPEED_PATHERROR: 경로를 열 수 없는 경우 입니다.
- SPEED_IOCTLERROR: 허브 IOCTL이 실패했습니다.
void GetPortSpeed(const WCHAR *Path, ULONG PortIndex, UCHAR *pPortSpeed)
{
if (Path == NULL) { return; }
HANDLE handle = CreateFile(
Path,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
NULL,
NULL
);
if (handle == INVALID_HANDLE_VALUE)
{
*pPortSpeed = SPEED_PATHERROR;
return;
}
PUSB_NODE_CONNECTION_INFORMATION_EX ConnectionInfo =
(PUSB_NODE_CONNECTION_INFORMATION_EX)
malloc(sizeof(USB_NODE_CONNECTION_INFORMATION_EX));
ConnectionInfo->ConnectionIndex = PortIndex;
ULONG bytes = 0;
BOOL success = DeviceIoControl(handle,
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX,
ConnectionInfo,
sizeof(USB_NODE_CONNECTION_INFORMATION_EX),
ConnectionInfo,
sizeof(USB_NODE_CONNECTION_INFORMATION_EX),
&bytes,
NULL);
CloseHandle(handle);
if (success == FALSE)
{
*pPortSpeed = SPEED_IOCTLERROR;
}
else
{
*pPortSpeed = (UCHAR)ConnectionInfo->Speed;
}
free(ConnectionInfo);
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP, Windows Server 2003 이상. |
머리글 | usbioctl.h(Usbioctl.h 포함) |