IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbuser.h)
Permintaan kontrol I/O IOCTL_GET_HCD_DRIVERKEY_NAME mengambil nama kunci driver di registri untuk driver pengontrol host USB.
IOCTL_GET_HCD_DRIVERKEY_NAME adalah permintaan kontrol I/O mode pengguna. Permintaan ini menargetkan pengontrol host USB (GUID_DEVINTERFACE_USB_HOST_CONTROLLER).
Buffer input
Tidak ada.
Panjang buffer input
Tidak ada.
Buffer output
Anggota AssociatedIrp.SystemBuffer menentukan alamat buffer yang dialokasikan pemanggil yang berisi struktur USB_HCD_DRIVERKEY_NAME . Pada output, struktur ini memegang nama kunci driver. Untuk informasi selengkapnya, lihat Keterangan.
Panjang buffer output
Ukuran buffer ini ditentukan dalam anggota Parameters.DeviceIoControl.OutputBufferLength .
Keterangan
Untuk mendapatkan nama kunci driver di registri, Anda harus melakukan tugas berikut:
- Deklarasikan variabel jenis USB_HCD_DRIVERKEY_NAME.
- Kirim permintaan IOCTL_GET_HCD_DRIVERKEY_NAME dengan menentukan alamat dan ukuran variabel dalam parameter output. Saat kembali, anggota USB_HCD_DRIVERKEY_NAME ActualLength berisi panjang yang diperlukan untuk mengalokasikan buffer untuk menahan USB_HCD_DRIVERKEY_NAME yang diisi dengan nama kunci driver.
- Alokasikan memori untuk buffer untuk menahan struktur USB_HCD_DRIVERKEY_NAME . Ukuran buffer harus berupa nilai ActualLength yang diterima.
- Kirim permintaan IOCTL_GET_HCD_DRIVERKEY_NAME dengan meneruskan penunjuk ke buffer yang dialokasikan dan ukurannya dalam parameter output. Saat kembali, anggota DriverKeyNamedari USB_HCD_DRIVERKEY_NAME adalah string Unicode null-dihentikan yang berisi nama kunci driver yang terkait dengan driver pengontrol host.
/*++
Routine Description:
This routine prints the name of the driver key associated with
the specified host controller driver.
Arguments:
HCD - Handle for host controller driver.
Return Value: Boolean that indicates success or failure.
--*/
BOOL GetHCDDriverKeyName (HANDLE HCD)
{
BOOL success;
ULONG nBytes;
USB_HCD_DRIVERKEY_NAME driverKeyName;
PUSB_HCD_DRIVERKEY_NAME driverKeyNameW;
driverKeyNameW = NULL;
// 1. Get the length of the name of the driver key.
success = DeviceIoControl(HCD,
IOCTL_GET_HCD_DRIVERKEY_NAME,
NULL,
0,
&driverKeyName,
sizeof(driverKeyName),
&nBytes,
NULL);
if (!success)
{
printf("First IOCTL_GET_HCD_DRIVERKEY_NAME request failed\n");
goto GetHCDDriverKeyNameDone;
}
//2. Get the length of the driver key name.
nBytes = driverKeyName.ActualLength;
if (nBytes <= sizeof(driverKeyName))
{
printf("Incorrect length received by IOCTL_GET_HCD_DRIVERKEY_NAME.\n");
goto GetHCDDriverKeyNameDone;
}
// 3. Allocate memory for a USB_HCD_DRIVERKEY_NAME
// to hold the driver key name.
driverKeyNameW = (PUSB_HCD_DRIVERKEY_NAME) malloc(nBytes);
if (driverKeyNameW == NULL)
{
printf("Failed to allocate memory.\n");
goto GetHCDDriverKeyNameDone;
}
// Get the name of the driver key of the device attached to
// the specified port.
success = DeviceIoControl(HCD,
IOCTL_GET_HCD_DRIVERKEY_NAME,
NULL,
0,
driverKeyNameW,
nBytes,
&nBytes,
NULL);
if (!success)
{
printf("Second IOCTL_GET_HCD_DRIVERKEY_NAME request failed.\n");
goto GetHCDDriverKeyNameDone;
}
// print the driver key name.
printf("Driver Key Name: %s.\n", driverKeyNameW->DriverKeyName);
GetHCDDriverKeyNameDone:
// Cleanup.
// Free the allocated memory for USB_HCD_DRIVERKEY_NAME.
if (driverKeyNameW != NULL)
{
free(driverKeyNameW);
driverKeyNameW = NULL;
}
return success;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Header | usbuser.h (termasuk Usbioctl.h) |