Работа с 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-устройства влияет на состояния управления питанием для устройства.