Поделиться через


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).

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Никакой.

Длина входного буфера

Никакой.

Выходной буфер

Элемент AssociatedIrp.SystemBuffer указывает адрес выделенного вызывающим буфера, содержащего структуру USB_HCD_DRIVERKEY_NAME. В выходных данных эта структура содержит имя ключа драйвера. Дополнительные сведения см. в разделе "Примечания".

Длина выходного буфера

Размер этого буфера указывается в элементе Parameters.DeviceIoControl.OutputBufferLength.

Блок состояния

Стек USB устанавливает Irp->IoStatus.Status, чтобы STATUS_SUCCESS, если запрос выполнен успешно. В противном случае usb-стек устанавливает состояние соответствующего условия ошибки, например STATUS_INVALID_PARAMETER или STATUS_INSUFFICIENT_RESOURCES.

Замечания

Чтобы получить имя ключа драйвера в реестре, необходимо выполнить следующие задачи:

  1. Объявите переменную типа USB_HCD_DRIVERKEY_NAME.
  2. Отправьте запрос IOCTL_GET_HCD_DRIVERKEY_NAME, указав адрес и размер переменной в выходных параметрах. При возврате элемент ActualLengthUSB_HCD_DRIVERKEY_NAME содержит длину, необходимую для выделения буфера для хранения USB_HCD_DRIVERKEY_NAME, заполненного именем ключа драйвера.
  3. Выделите память для буфера для хранения USB_HCD_DRIVERKEY_NAME структуры. Размер буфера должен быть полученным значением ActualLength.
  4. Отправьте запрос IOCTL_GET_HCD_DRIVERKEY_NAME путем передачи указателя на выделенный буфер и его размер в выходных параметрах. При возвращении элемент DriverKeyNameUSB_HCD_DRIVERKEY_NAME является строкой Юникода, завершающей значение NULL, которая содержит имя ключа драйвера, связанного с драйвером контроллера узла.
В следующем примере кода показано, как отправить запрос управления IOCTL_GET_HCD_DRIVERKEY_NAME ввода-вывода.

/*++

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)

См. также

USB_HCD_DRIVERKEY_NAME