IOCTL_GET_HCD_DRIVERKEY_NAME IOCTL (usbioctl.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 устанавливает Irp->IoStatus.Status, чтобы STATUS_SUCCESS, если запрос выполнен успешно. В противном случае usb-стек устанавливает состояние соответствующего условия ошибки, например STATUS_INVALID_PARAMETER или STATUS_INSUFFICIENT_RESOURCES.
Замечания
Чтобы получить имя ключа драйвера в реестре, необходимо выполнить следующие задачи:
- Объявите переменную типа 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;
}
Требования
Требование | Ценность |
---|---|
заголовка | usbioctl.h (include Usbioctl.h) |