Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описываются объекты устройства, которые набор драйверов может создавать для USB-оборудования. На примере показаны объекты устройств технологии WDM и их структура.
На следующем рисунке показаны объекты устройств, создаваемые примерами драйверов. Дополнительные сведения см. в разделе "Уровни драйвера WDM: пример".
Начиная с нижней части этого рисунка, объекты устройств в примерах стека устройств включают:
PDO и FDO для шины PCI.
Драйвер корневой шины перечисляет внутреннюю системную шину (корневую шину) и создает PDO для каждого найденного устройства. Один из этих PDOs предназначен для шины PCI. (На рисунке не отображаются PDO и FDO для корневой шины.)
Диспетчер PnP определяет драйвер PCI в качестве драйвера функции для шины PCI, загружает драйвер (если он еще не загружен) и передает PDO драйверу PCI. В своей подпрограмме AddDevice драйвер PCI создает FDO для шины PCI (IoCreateDevice) и присоединяет FDO к стеку устройств (IoAttachDeviceToDeviceStack) для шины PCI. Драйвер PCI создает и присоединяет этот FDO в рамках своих обязанностей в качестве драйвера функции для шины PCI.
Этот пример не включает драйверы фильтров для шины PCI.
PDO и FDO для USB-контроллера хоста.
Диспетчер PnP направляет драйвер PCI для запуска устройства (IRP_MN_START_DEVICE), а затем запрашивает драйвер PCI для своих дочерних объектов (IRP_MN_QUERY_DEVICE_RELATIONS с типом отношения BusRelations). В ответ драйвер PCI перечисляет устройства на своей шине. В этом примере драйвер PCI находит USB хост-контроллер и создает PDO для этого устройства. Широкая стрелка на рисунке указывает, что контроллер USB-узла является дочерним элементом шины PCI. Драйвер PCI создает PDOs для своих дочерних устройств в рамках своих обязанностей в качестве водителя шины для шины PCI.
Диспетчер PnP определяет пару миниклассов и классов драйвера контроллера USB хоста в качестве функционального драйвера контроллера USB хоста и загружает эту пару драйверов. Диспетчер PnP вызывает пару драйверов в соответствующее время для создания и подключения FDO для контроллера USB-хоста.
В этом примере не содержатся драйверы фильтров для контроллера USB-узла.
PDO и FDO для USB-концентратора.
Контроллер USB-узла перечисляет шину, находит USB-концентратор в единственном порту и создает PDO для концентратора. Драйвер USB-концентратора создает и подключает FDO для концентратора.
Этот пример не включает фильтрующие драйверы для USB-концентратора.
PDO, FDO и два фильтра для устройства джойстика.
Драйвер USB-концентратора перечисляет свою шину, находит устройство HID (джойстик) и создает PDO для джойстика.
В этом примере драйвер фильтра нижнего уровня настраивается в реестре для устройств джойстика, поэтому диспетчер PnP загружает драйвер фильтра. Драйвер фильтра определяет, что он относится к устройству и создает и присоединяет фильтр DO к стеку устройств.
Диспетчер PnP определяет, что функцией драйвера для устройства джойстика является пара драйверов класса/миникласса HID, и загружает эти драйверы. Пара драйверов состоит из драйвера миникласса, связанного с DLL драйвера класса. Вместе они работают в качестве одного драйвера функции для устройства. Пара драйверов класса и миникласса создает один объект устройства, FDO и присоединяет его к стеку устройств.
Драйвер фильтра верхнего уровня создает и присоединяет фильтр DO к стеку устройств таким образом, как и фильтр нижнего уровня.
Родительский драйвер шины всегда создает PDO в нижней части стека устройств для определенного устройства. Когда драйверы обрабатывают PnP или энергетические IRPs, они должны передавать каждый IRP вниз по стеку устройств к PDO и к связанному с ним драйверу шины.
На следующем рисунке показаны те же стеки устройств, что и на предыдущем рисунке, но подчеркивается, какие объекты устройств создаются и управляются каждым драйвером.
Драйвер шины работает с несколькими стеками устройств. Драйвер шины создает FDO для адаптера шины или контроллера и создает PDO для каждого дочернего устройства.