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


Метод IWDFUsbTargetDevice::RetrieveDescriptor (wudfusb.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.]

Метод RetrieveDescriptor извлекает дескриптор USB, который может описывать устройство, конфигурацию или строку.

Синтаксис

HRESULT RetrieveDescriptor(
  [in]      UCHAR  DescriptorType,
  [in]      UCHAR  Index,
  [in]      USHORT LanguageID,
  [in, out] ULONG  *BufferLength,
  [out]     PVOID  Buffer
);

Параметры

[in] DescriptorType

Значение типа , указывающее тип возвращаемого дескриптора. Этот параметр соответствует полю bDescriptorType стандартного дескриптора устройства, значения которого описаны в спецификации универсальной последовательной шины . (Этот ресурс может быть недоступен на некоторых языках.

и страны.) Некоторые из этих значений перечислены в описании элемента DescriptorType структуры _URB_CONTROL_DESCRIPTOR_REQUEST .

[in] Index

Индекс дескриптора в соответствии со спецификацией универсальной последовательной шины . (Этот ресурс может быть недоступен на некоторых языках.

и страны.)

[in] LanguageID

Идентификатор языка, если драйвер UMDF запрашивает дескриптор строки; в противном случае этот параметр равен нулю.

[in, out] BufferLength

Указатель на переменную, которая на входных данных содержит размер буфера, на который указывает буфер , в байтах. Если операция выполнена успешно, переменная получает количество байтов, скопированных платформой в буфер.

[out] Buffer

Указатель на буфер, предоставленный вызывающим объектом, который получает дескриптор USB. Тип буфера должен соответствовать значению, указанному в descriptorType.

Возвращаемое значение

RetrieveDescriptor возвращает одно из следующих значений:

Код возврата Описание
S_OK

Метод RetrieveDescriptor успешно извлек дескриптор USB.

E_OUTOFMEMORY

В RetrieveDescriptor обнаружен сбой выделения.

Код ошибки, определенный в Winerror.h
Это значение соответствует коду ошибки, возвращенной API WinUsb.

Комментарии

Сведения о допустимых типах дескрипторов, которые драйвер UMDF может передать для параметра DescriptorType , см. в функции WinUsb_GetDescriptor .

Метод RetrieveDescriptor создает запрос UMDF и синхронно отправляет его в целевой объект ввода-вывода.

Примеры

В следующем примере кода извлекается дескриптор конфигурации USB.

HRESULT
CUmdfHidDevice::RetrieveConfigDescriptor(
    __out_bcount(ConfigDescriptorCb) PUSB_CONFIGURATION_DESCRIPTOR *ConfigDescriptor,
    __out ULONG *ConfigDescriptorCb
    )
{
    ULONG descriptorCb = sizeof(USB_CONFIGURATION_DESCRIPTOR);
    USB_CONFIGURATION_DESCRIPTOR descriptorHeader;
    PBYTE descriptorBuffer;
    HRESULT hr;

    //
    // Get the configuration descriptor at index 0
    //

    hr = m_UsbTargetDevice->RetrieveDescriptor(
                            USB_CONFIGURATION_DESCRIPTOR_TYPE,
                            0,
                            0,
                            &descriptorCb,
                            &descriptorHeader
                            );
    //
    // Store the buffer in the output parameter, or delete it.
    //
    if (SUCCEEDED(hr)) {
        *ConfigDescriptor = (PUSB_CONFIGURATION_DESCRIPTOR) (descriptorHeader);
        *ConfigDescriptorCb = descriptorCb;
    }
    else {
        delete[] descriptorHeader;
    }
    return hr;
}

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.5
Верхняя часть wudfusb.h (включая Wudfusb.h)
DLL WUDFx.dll

См. также раздел

IWDFUsbTargetDevice

WinUsb_GetDescriptor