共用方式為


IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX要求會擷取 USB 埠的相關信息,如果有 USB 埠,則會擷取連接至埠的裝置。

用戶端驅動程序必須在PASSIVE_LEVEL的 IRQL 傳送此 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