IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX IOCTL (usbioctl.h)

Permintaan IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX mengambil informasi tentang port USB dan perangkat yang terpasang pada port, jika ada.

Driver klien harus mengirim IOCTL ini di IRQL PASSIVE_LEVEL.

IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX adalah permintaan kontrol I/O mode pengguna. Permintaan ini menargetkan perangkat hub USB (GUID_DEVINTERFACE_USB_HUB).

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer Input/Output

Buffer input dan output menunjuk ke struktur USB_NODE_CONNECTION_INFORMATION_EX yang dialokasikan pemanggil. Pada input, anggota ConnectionIndex dari struktur ini harus berisi angka yang lebih besar dari atau sama dengan 1 yang menunjukkan jumlah port yang informasi koneksinya akan dilaporkan. Driver hub mengembalikan informasi koneksi di anggota USB_NODE_CONNECTION_INFORMATION_EX yang tersisa. IRP, anggota AssociatedIrp.SystemBuffer menunjuk ke struktur USB_NODE_CONNECTION_INFORMATION_EX .

Pada output, struktur USB_NODE_CONNECTION_INFORMATION_EX menerima informasi tentang koneksi yang ditunjukkan dari driver hub USB.

Panjang buffer Input/Output

Ukuran struktur USB_NODE_CONNECTION_INFORMATION_EX .

Blok status

Tumpukan USB mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS jika permintaan berhasil. Jika tidak, tumpukan USB mengatur Status ke kondisi kesalahan yang sesuai, seperti STATUS_INVALID_PARAMETER atau STATUS_INSUFFICIENT_RESOURCES.

Keterangan

Berikut adalah contoh yang menunjukkan cara mendapatkan kecepatan port hub dengan mengirim permintaan ini.

Fungsi menentukan tautan simbolis ke perangkat hub dan indeks port untuk kueri. Saat kembali, pPortSpeed menunjukkan:

  • Kecepatan port
  • SPEED_PATHERROR: jika tidak dapat membuka jalur.
  • SPEED_IOCTLERROR: Hub IOCTL gagal.
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);
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP, Windows Server 2003, dan yang lebih baru.
Header usbioctl.h (termasuk Usbioctl.h)

Lihat juga

USB_NODE_CONNECTION_INFORMATION

USB_NODE_CONNECTION_INFORMATION_EX