Драйверы на стороне USB в Windows
Описывает архитектуру стека функций USB.
На USB-устройстве стек функций USB ссылается на группу драйверов, перечисляемых диспетчером самонастраивающийся, при создании объекта физического устройства USB-устройства (PDO).
На одном устройстве конфигурации USB-устройство может определить один или несколько интерфейсов. Например, протокол MTP для передачи файлов на устройство и с устройства. Составное USB-устройство может поддерживать несколько интерфейсов в одной конфигурации. Стек функций USB создает PDOs для каждого интерфейса, а диспетчер PnP загружает драйвер класса, который создает объект устройства функции (FDO) для этого интерфейса.
Стек функций USB концептуально представлен на этом изображении:
Приложения и службы
- Все запросы в режиме пользователя отправляются в GenericUSBFn.sys драйвера класса в режиме ядра Майкрософт. Вы можете создать службу пользовательского режима, которая взаимодействует с GenericUSBFn.sys, отправив коды управления ввода-вывода (IOCTLs), как определено в genericusbfnioctl.h. Дополнительные сведения об этих ioCTLs см. в разделе "Взаимодействие с GenericUSBFn.sys" из службы пользовательского режима
Драйвер класса функции USB
Драйвер класса функции USB реализует функциональные возможности определенного интерфейса (или группы интерфейсов) на USB-устройстве. MTP и IpOverUsb являются примерами системных драйверов классов. Драйвер класса может быть реализован исключительно как драйвер в режиме ядра, или это может быть служба пользовательского режима, связанная с GenericUSBFn.sys драйвера класса, предоставленного системой.
Драйвер класса функций отправляет запросы к контроллеру с помощью драйвера класса функции USB в интерфейсы программирования UFX.
Расширение класса функций USB (UFX)
Расширение класса функций USB (UFX) — это системное расширение в платформу драйвера режима ядра (KMDF). USB является стандартной шиной и имеет некоторые необходимые функциональные возможности и возможности. UFX отвечает за реализацию логики функции USB, которая является общим для всех контроллеров функций USB и обработки и /или отправки запросов из драйверов классов функций USB. В частности, UFX обрабатывает процесс перечисления устройства и обработки стандартной передачи управления. Для выполнения некоторых из этих операций UFX необходимо знать о возможностях шины. Эти возможности передаются В UFX при установке интерфейса расширения класса.
UFX предоставляет стандартные ioCTLs, которые можно использовать для отправки запросов на контроллер верхнего уровня (драйвер класса USB и службы пользовательского режима). Кроме того, UFX уведомляет верхние слои о стандартных запросах, полученных от узла.
Драйвер клиента-функции USB
UFX предоставляет абстрактный интерфейс, который работает согласованно в разных контроллерах. Однако контроллеры имеют различные возможности, при этом ограничения, такие как количество конечных точек, типы конечных точек, низкая мощность, удаленное пробуждение. Например, некоторые контроллеры поддерживают DMA, а другие — нет. Некоторые контроллеры реализуют потоки в оборудовании, а другие контроллеры ожидают, что драйвер будет обрабатывать потоки. По этим причинам в UFX обрабатываются только распространенные функциональные возможности. Передача, управление питанием, поддержка потоков и другие функции, которые зависят от контроллера к контроллеру, обрабатываются драйвером клиента.
Драйвер клиента функции USB отвечает за реализацию операций, относящихся к контроллеру. К ним относятся реализация передачи данных конечных точек, изменения состояния USB-устройства (сброс, приостановка, возобновление), обнаружение подключения и отсоединения, обнаружение портов и зарядных устройств. Драйвер клиента также отвечает за обработку событий управления питанием и PnP.
Драйвер клиента-функции записывается как драйвер Driver Framework в режиме ядра (KMDF) с помощью драйвера класса функции USB в интерфейсы программирования UFX.
Корпорация Майкрософт предоставляет встроенные клиентские драйверы функций (UfxChipidea.sys, Ufxsynopsys.sys) для контроллеров ChipIdea и Synopsys.
Usb-драйвер нижнего фильтра
Usb-драйвер нижнего фильтра поддерживает обнаружение зарядных устройств, если контроллер функций использует встроенные драйверы Synopsys и ChipIdea. Драйвер фильтра управляет зарядкой USB, начиная с обнаружения USB-порта. Он должен опубликовать GUID для каждого типа зарядного устройства, который он поддерживает, и список свойств этого зарядного устройства. Если настраивается определенное зарядное устройство, драйвер USB-фильтра определяет список поддерживаемых идентификаторов propertyID и соответствующие типы значений, которые можно отправить в него, чтобы настроить зарядное устройство. Драйвер также уведомляет стек батареи, когда он может начать зарядку, и максимальное количество текущего устройства может нарисовать. Для клиентских драйверов, отличных от драйверов Synopsys и ChipIdea, логика зарядки может быть реализована в драйвере клиента.
Драйвер класса функций отправляет запрос в UFX с помощью интерфейсов программирования для поддержки собственных зарядных устройств.