PnP диспетчер

Из предыдущей статьи мы узнали про подсистему ввода / вывода. А в этой разберем один из её компонентов, а именно PnP диспетчер.










PnP-диспетчер




PnP-диспетчер является основным компонентом Windows, который позволяет распознавать подключаемое оборудование и производить с ним некоторые действия.




Поддержка технологии PnP основывается на промышленных стандартах подключаемых к шинам устройств. Например в стандарте USB заложен способ самоидентификации устройств подключенных к шине USB.




PnP-диспетчер реализует следующие возможности:




  • Распознает устройства подключенные при загрузке системы, а также при подключении нового оборудования и при его отключении.
  • Собирает об устройствах информацию и на её основе выделяет ресурсы для каждого устройства. Ресурсами могут быть: прерывания, диапазон адресов ввода / вывода, регистры ввода / вывода, ресурсы шины и так далее.
  • Загружает соответствующие драйвера в систему. Если драйвер есть в системе, он будет загружен. Если подходящего драйвера нет, пользователя попросят указать местоположение драйвера, для его установки.
  • Поддерживает сетевые устройства, например принтеры или проекторы. Для этого специальные драйверы шины распознают сеть как шину, и подключают к этой шине сетевые устройства.




Помимо того что система поддерживает PnP, сами драйверы должны поддерживать эту технологию. Если в системе будет драйвер без поддержки PnP, то он может помешать работе всей системе. Так как PnP-диспетчер занимается распределением ресурсов для оборудования и нечего не знает про не PnP-драйвер, то могут возникнуть конфликты. Кроме того, драйверы без поддержки PnP могут помешать системе перейти в спящий режим или режим гибернации.




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




Перечисление устройств происходит при:




  • загрузке системы,
  • возобновлении из гибернации,
  • получении явного распоряжения, например при нажатии кнопки «Обновить конфигурацию оборудования» в «Диспетчере устройств».




Диспетчер устройств / Обновить конфигурацию оборудования




PnP-диспетчер начинает перечисление устройств с виртуального драйвера шины root, который представляет всю систему и играет роль драйвера шины для не PnP-устройств и для абстрактных объектов HAL.




HAL действует как драйвер шины для устройств напрямую подключенных к материнской плате (обычно это шина PCI).




Также корневой драйвер шины обнаруживает другие шины, и вот на этих шинах PnP-диспетчер обнаруживает подключенное оборудование с поддержкой PnP. По мере поступления информации от драйверов шин об обнаруженных устройствах формируется дерево устройств.




Пример дерева устройств Windows




В свойствах устройства, в «Диспетчере устройств» можно посмотреть различные сведения об устройстве:




Сведения об устройстве «Мышь»




Стек устройств




Есть еще такое понятие — стек устройства. Стек строится снизу вверх, стек каждого устройства состоит как минимум из двух объектов. Внизу драйвер шины создает PDO (Physical Device Object), вверху объект FDO (Functional Device Object) — функциональный драйвер. Между PDO и FDO могут быть различные фильтры (поддраверы). Например:




Стек usb-мыши




  • снизу PDO — драйвер шины USB,
  • сверху FDO — драйвер мышки.




Вот еще пример (с фильтрами):




Стек web-камеры




  • снизу PDO — драйвер шины USB,
  • далее фильтр — драйвер микрофона,
  • затем еще один фильтр — драйвер камеры,
  • далее FDO — функциональный драйвер веб камеры.




Реестр для PnP-диспетчера




PnP-диспетчер знает кому какой драйвер нужен благодаря информации из реестра. Вот основные ветки:




  • HKLMSystemCurrentControlSetEnum — известные типы устройств;
  • HKLMSystemCurrentControlSetControlClass — настройки устройств;
  • HKLMSystemCurrentControlSetServices — настройки драйверов.




Когда драйвер шины обнаруживает новое устройство, он сначала создает PDO, затем оповещает о новом устройстве PnP-диспетчер. Тот в ответ запрашивает у драйвера шины идентификатор устройства и идентификатор экземпляра устройства (чтобы различить два одинаковых устройства). И далее PnP-диспетчер загружает необходимые драйвера (FDO) и фильтры (список берется из реестра). Так создается стек устройства.








Ссылка на wikipedia




Вернуться к оглавлению



2021-09-29T16:53:41
Администрирование Windows