Из предыдущей статьи мы узнали про подсистему ввода / вывода. А в этой разберем один из её компонентов, а именно 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-диспетчер знает кому какой драйвер нужен благодаря информации из реестра. Вот основные ветки:

  • HKLM\System\CurrentControlSet\Enum — известные типы устройств;
  • HKLM\System\CurrentControlSet\Control\Class — настройки устройств;
  • HKLM\System\CurrentControlSet\Services — настройки драйверов.

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


Подписывайтесь в группу VK

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *