Обнаружение и распознавание устройств Plug and Play
В начале этой главы мы уже рассматривали пример, позволяющий получить общее представление о процессах, которые происходят в системе при установке новых устройств и разрешении аппаратных конфликтов. Однако этот пример имеет два существенных недостатка – он слишком прост и, самое главное, представляет информацию с точки зрения конечного пользователя. Теперь, когда мы ознакомились с основными концепциями Plug and Play, настало время обсудить, что же на самом деле происходит в системе при обнаружении и установке новых устройств, и какие компоненты требуются для успешного выполнения этой задачи.
Фактически подсистема Plug and Play выполняет следующие функции:
- обнаружение и энумерация устройств;
- выделение устройствам аппаратных ресурсов;
- динамическая загрузка, инициализация и выгрузка драйверов;
- уведомление других драйверов и приложений о доступности нового устройства;
- управление подачей электропитания при установке и удалении устройств.
После того как Windows обнаруживает новое устройство Plug and Play, драйвер устройства может быть сконфигурирован и загружен динамически, при минимальном вмешательстве пользователя (фактически в большинстве случаев такое вмешательство вообще не требуется). Некоторые шины, например, PCI и USB, в полной мере используют преимущества Plug and Play, и распознавание устройств, подключенных к таким шинам, происходит полностью автоматически. Как только новое устройство обнаружено, PnP Manager и шинный драйвер производят его энумерацию, после чего производится загрузка драйвера и запуск устройства. Если устройство подключено впервые, и системный реестр не содержит информации об этом устройстве, Windows установит и запустит драйверы для этого устройства.
Как уже упоминалось, программа Setup динамически исследует аппаратную конфигурацию компьютера и заносит информацию обо всех обнаруженных устройствах в реестр. Необходимую информацию программа Setup получает от самого устройства и от ассоциированных с ним INF-файлов.
В системах РпР подсистема РпР динамически отслеживает все переходы устройств между различными состояниями по мере того, как устройство подключается к системе, конфигурируется, запускается, останавливается и удаляется из системы. Все эти переходы схематично показаны на иллюстрации, приведенной на рис. 2.10.
Когда устанавливается новое устройство, система использует идентификатор устройства (device ID) для поиска INF-файлов, которые могут быть использованы для установки этого устройства. Windows далее использует эту информацию для создания параметров реестра в составе ключа HKEY_LOCAL_MACHINE, a затем копирует на диск необходимые драйверы. Если с новым устройством можно использовать несколько различных драйверов, то для определения драйвера, наиболее подходящего для данного устройства, Windows применяет так называемую систему приоритетного использования драйверов (driver-ranking schemes). Приоритеты драйверов определяются на основании наличия или отсутствия цифровой подписи и близости соответствия аппаратному идентификатору устройства (hardware ID, HW ID).
Рис. 2.10. Состояния устройств РnР