Работа с 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-интерфейса платформы для каждого USB-интерфейса, который поддерживает устройство.

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

Если драйвер UMDF поддерживает USB-устройства, предоставляющие несколько интерфейсов или альтернативные параметры, методы объекта интерфейса позволяют драйверу:

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

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

IWDFUsbInterface::GetInterfaceNumber
Получает номер USB-интерфейса, связанный с объектом USB-интерфейса.

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

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

IWDFUsbInterface::GetConfiguredSettingIndex
Получает значение индекса, определяющее альтернативный параметр, выбранный в данный момент для USB-интерфейса.

IWDFUsbInterface::RetrieveUsbPipeObject
Получает указатель на интерфейс IWDFUsbTargetPipe, предоставляющий объект канала фреймворка, связанный с указанным интерфейсом USB-устройства и индексом канала.

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

Выбор альтернативного параметра для интерфейса UMDF-USB

Драйвер UMDF может вызвать метод IWDFUsbInterface::SelectSetting , чтобы выбрать альтернативный параметр для одного из USB-интерфейсов, поддерживаемых устройством.

Альтернативные параметры устройства должны быть нумерованы последовательно, начиная с нуля.

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