Работа с 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-канала, полученные ранее, и повторно создать их.