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


Работа с USB-устройствами в драйверах UMDF 1.x

Предупреждение

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

Архивные примеры UMDF 1 можно найти в Windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.

Дополнительные сведения см. в разделе начало работы с помощью UMDF.

Платформа представляет каждое USB-устройство в виде объекта USB-устройства платформы. Драйвер UMDF должен создать объект USB-устройства платформы, прежде чем драйвер сможет получить доступ к поддержке платформы для целевых объектов USB-ввода-вывода. UMDF предоставляет методы объектов USB-устройства, которые позволяют драйверу UMDF:

Создание объекта устройства UMDF-USB

Чтобы использовать возможности целевого объекта ввода-вывода USB платформы, драйвер UMDF должен сначала получить указатель на интерфейс IWDFUsbTargetFactory . Чтобы получить указатель, драйвер должен вызвать метод QueryInterface интерфейса IWDFDevice устройства. В следующем примере кода показано, как вызвать QueryInterface для получения указателя:

hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);

Затем драйвер должен вызвать метод IWDFUsbTargetFactory::CreateUsbTargetDevice , чтобы создать целевой объект USB-ввода-вывода для устройства. После того как драйвер создаст целевой объект ввода-вывода USB, драйвер может отправлять запросы к целевому объекту ввода-вывода. Как правило, драйверы вызывают IWDFUsbTargetFactory::CreateUsbTargetDevice из функции обратного вызова IPnpCallbackHardware::OnPrepareHardware .

После вызова драйвера IWDFUsbTargetFactory::CreateUsbTargetDevice драйвер может получить сведения об USB-устройстве (например, дескрипторы USB для устройства, ИНТЕРФЕЙСы USB и конечные точки интерфейса). Дескрипторы USB описаны в спецификации USB.

Получение сведений об устройстве UMDF-USB

После того как драйвер UMDF вызывает метод IWDFUsbTargetFactory::CreateUsbTargetDevice для создания объекта целевого устройства UMDF-USB, драйвер может вызвать следующие методы, определяемые объектом целевого usb-устройства для получения сведений о USB-устройстве:

IWDFUsbTargetDevice::RetrieveDescriptor
Получает дескриптор USB-устройства.

IWDFUsbTargetDevice::GetNumInterfaces
Получает количество USB-интерфейсов, поддерживаемых устройством.

IWDFUsbTargetDevice::RetrieveUsbInterface
Получает указатель на интерфейс IWDFUsbInterface , который предоставляет один из интерфейсов USB, поддерживаемых устройством.

IWDFUsbTargetDevice::RetrieveDeviceInformation
Извлекает сведения о возможностях, связанные с USB-устройством.

IWDFUsbTargetDevice::RetrievePowerPolicy
Извлекает политику управления питанием WinUsb.

IWDFUsbTargetDevice::GetWinUsbHandle
Получает дескриптор интерфейса WinUsb, связанный с объектом целевого устройства ввода-вывода.

Отправка передачи элемента управления в объект устройства UMDF-USB

Драйвер UMDF может вызывать метод IWDFUsbTargetDevice::FormatRequestForControlTransfer для форматирования запроса ввода-вывода, описывающего стандартную передачу элементов управления USB для конкретного класса устройства или поставщика. Затем драйвер может вызвать метод IWDFIoRequest::Send , чтобы отправить запрос синхронно или асинхронно.

Настройка политики питания для устройства UMDF-USB

Драйвер UMDF может вызвать метод IWDFUsbTargetDevice::SetPowerPolicy , чтобы задать политику питания, используемую WinUsb для USB-устройства. Политика питания для USB-устройства влияет на состояния управления питанием для устройства.