IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbuser.h)
Запрос IOCTL_GET_HCD_DRIVERKEY_NAME управления вводом-выводом извлекает имя ключа драйвера в реестре для драйвера USB-контроллера узла.
IOCTL_GET_HCD_DRIVERKEY_NAME — это запрос на управление вводом-выводом в пользовательском режиме. Этот запрос предназначен для хост-контроллера USB (GUID_DEVINTERFACE_USB_HOST_CONTROLLER).
Входной буфер
Нет.
Длина входного буфера
Нет.
Выходной буфер
Элемент AssociatedIrp.SystemBuffer указывает адрес буфера, выделенного вызывающим объектом, который содержит структуру USB_HCD_DRIVERKEY_NAME . В выходных данных эта структура содержит имя ключа драйвера. Дополнительные сведения см. в подразделе "Примечания".
Длина выходного буфера
Размер этого буфера указывается в элементе Parameters.DeviceIoControl.OutputBufferLength .
Комментарии
Чтобы получить имя ключа драйвера в реестре, необходимо выполнить следующие задачи:
- Объявите переменную типа USB_HCD_DRIVERKEY_NAME.
- Отправьте запрос IOCTL_GET_HCD_DRIVERKEY_NAME , указав адрес и размер переменной в выходных параметрах. При возврате элемент ActualLengthUSB_HCD_DRIVERKEY_NAME содержит длину, необходимую для выделения буфера для хранения USB_HCD_DRIVERKEY_NAME , заполненной именем ключа драйвера.
- Выделение памяти для буфера для хранения структуры USB_HCD_DRIVERKEY_NAME . Размер буфера должен быть полученным значением ActualLength .
- Отправьте запрос IOCTL_GET_HCD_DRIVERKEY_NAME путем передачи указателя на выделенный буфер и его размер в выходных параметрах. При возврате элемент DriverKeyNameUSB_HCD_DRIVERKEY_NAME представляет собой строку Юникода, завершающуюся null, которая содержит имя ключа драйвера, связанного с драйвером контроллера узла.
/*++
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;
}
Требования
Требование | Значение |
---|---|
Заголовок | usbuser.h (включая Usbioctl.h) |