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
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk