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


Работа с USB-устройствами

В этом разделе описываются операции, которые может выполнять драйвер Kernel-Mode Driver Framework (KMDF) или User-Mode Driver Framework (UMDF), начиная с версии 2, с помощью методов объектов USB-устройства, предоставляемых платформами драйверов Windows (WDF).

Он содержит следующие подразделы:

Пошаговые инструкции по написанию простого драйвера USB-клиента на основе KMDF см. в статье Создание первого драйвера КЛИЕНТА USB (KMDF).

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

Чтобы использовать целевые объекты USB-ввода-вывода платформы (WDFUSBDEVICE, WDFUSBINTERFACE и WDFUSBPIPE), драйвер клиента должен сначала вызвать WdfUsbTargetDeviceCreateWithParameters , чтобы создать объект USB-устройства. Как правило, драйвер вызывает WdfUsbTargetDeviceCreateWithParameters из функции обратного вызова EvtDevicePrepareHardware .

Когда драйвер вызывает WdfUsbTargetDeviceCreateWithParameters, платформа создает объект WDFUSBDEVICE и связывает его с FDO, представляющим USB-устройство. Метод возвращает дескриптор новому объекту USB-устройства платформы, который драйвер USB-клиента может затем использовать для взаимодействия с физическим устройством.

После вызова WdfUsbTargetDeviceCreateWithParameters драйвер может вызвать WdfUsbTargetDeviceGetDeviceDescriptor и WdfUsbTargetDeviceRetrieConfigDescriptor , чтобы получить дескрипторы USB с устройства. Эти дескрипторы содержат сведения о первой конфигурации устройства, его параметрах интерфейса и определенных конечных точках. (Дескрипторы USB определены в официальной спецификации USB.)

Настройка USB-устройства

Метод WdfUsbTargetDeviceCreateWithParameters также создает объект интерфейса USB платформы для каждого ИНТЕРФЕЙСА USB, содержащегося в первой конфигурации устройства.

После вызова WdfUsbTargetDeviceCreateWithParameters драйвер клиента должен вызвать WdfUsbTargetDeviceSelectConfig , чтобы выбрать конфигурацию. Этот метод создает объекты интерфейса платформы для каждого альтернативного параметра интерфейса в выбранной конфигурации.

Метод также создает объекты канала, представляющие конечные точки, определенные в каждом альтернативном параметре каждого интерфейса выбранной конфигурации.

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

Вы также можете вызвать WdfUsbTargetDeviceSelectConfig , чтобы отменить настройку устройства.

Связанные сведения:

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

После настройки устройства драйвер клиента может вызвать следующие методы для получения сведений о USB-устройстве:

WdfUsbTargetDeviceQueryUsbCapability
Определяет, поддерживают ли контроллер узла и стек драйверов USB определенную возможность. Перед вызовом WdfUsbTargetDeviceQueryUsbCapability драйвер должен вызвать WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceGetIoTarget
Возвращает дескриптор целевого объекта ввода-вывода, связанного с USB-устройством. Драйвер может передать этот дескриптор в WdfRequestSend или WdfIoTargetStop.

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

WdfUsbTargetDeviceIsConnectedSynchronous (только KMDF)
Определяет, подключено ли устройство.

WdfUsbTargetDeviceRetrieveCurrentFrameNumber (только KMDF)
Извлекает текущий номер кадра USB.

Получение дескрипторов USB

Чтобы получить строки Юникода, содержащиеся в дескрипторов USB-устройства, драйвер может вызвать любой из следующих методов:

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

WdfUsbTargetDeviceRetrieConfigDescriptor
Получает дескриптор конфигурации USB устройства, дескрипторы интерфейса и дескрипторы конечной точки.

WdfUsbTargetDeviceQueryString
Копирует строку Юникода в буфер, предоставленный драйвером.

WdfUsbTargetDeviceAllocAndQueryString
Копирует строку Юникода в буфер, предоставленный платформой.

WdfUsbTargetDeviceFormatRequestForString
Форматирует запрос для строки Юникода. Драйвер может вызвать WdfRequestSend для отправки запроса синхронно или асинхронно.

Отправка передачи элементов управления

Драйвер может вызвать следующие методы для отправки запроса ввода-вывода, который описывает стандартную передачу элементов управления USB, класса устройства или поставщика.

WdfUsbTargetDeviceSendControlTransferSynchronously
Синхронно отправляет запрос на передачу элемента управления USB.

WdfUsbTargetDeviceFormatRequestForControlTransfer
Форматирует запрос на передачу элементов управления USB. Драйвер может вызвать WdfRequestSend для отправки запроса синхронно или асинхронно.

Дополнительные сведения см. в статье Отправка передачи элементов управления ЧЕРЕЗ USB.

Сброс и Power-Cycling порта устройства

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

WdfUsbTargetDeviceResetPortSynchronously
Синхронно отправляет запрос на сброс USB-порта устройства.

WdfUsbTargetDeviceCyclePortSynchronously (только KMDF)
Синхронно отправляет запрос на включение питания USB-порта устройства.

WdfUsbTargetDeviceFormatRequestForCyclePort (только KMDF)
Форматирует запрос на включение питания USB-порта устройства. Драйвер должен вызвать WdfRequestSend , чтобы отправить запрос синхронно или асинхронно.

Дополнительные сведения см. в статье Восстановление после ошибок USB-канала.

Отправка URB на устройство

Если драйвер KMDF взаимодействует со своим USB-устройством, отправляя запросы ввода-вывода, содержащие urb, драйвер может вызывать следующие методы:

WdfUsbTargetDeviceCreateUrb (только KMDF)
Выделяет блок запросов USB (URB). Перед вызовом WdfUsbTargetDeviceCreateUrb драйвер должен вызвать WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceCreateIsochUrb (только KMDF)
Выделяет изохронный блок запросов USB (URB). Перед вызовом WdfUsbTargetDeviceCreateIsochUrb драйвер должен вызвать WdfUsbTargetDeviceCreateWithParameters.

WdfUsbTargetDeviceSendUrbSynchronously (только KMDF)
Синхронно отправляет запрос ввода-вывода, содержащий URB.

WdfUsbTargetDeviceFormatRequestForUrb (только KMDF)
Форматирует запрос ввода-вывода, содержащий URB. Драйвер должен вызвать WdfRequestSend , чтобы отправить запрос синхронно или асинхронно.

WdfUsbTargetDeviceWdmGetConfigurationHandle (только KMDF)
Возвращает дескриптор конфигурации USBD устройства. Для некоторых urb требуется этот дескриптор.

Общие концептуальные сведения о URB см. в разделе Выделение и создание URI.