IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX请求检索有关 USB 端口和连接到该端口的设备的信息(如果有)。

客户端驱动程序必须以 IRQL PASSIVE_LEVEL 发送此 IOCTL。

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX 是用户模式 I/O 控制请求。 此请求面向 USB 集线器设备 (GUID_DEVINTERFACE_USB_HUB) 。

主要代码

IRP_MJ_DEVICE_CONTROL

输入/输出缓冲区

输入和输出缓冲区都指向调用方分配 的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)

另请参阅

USB_NODE_CONNECTION_INFORMATION

USB_NODE_CONNECTION_INFORMATION_EX