Каким образом обычно происходит установка драйверов в Win-dows 2000/XP? Есть два способа.
Автоматическая установка драйвера подсистемой РnР. Этот метод впервые появился в Windows 2000, был "подхвачен" в Windows XP и является рекомендуемым. Более подробная информация по данному вопросу приведена в главе 5. Здесь лишь следует напомнить, что системы Windows 2000 и Windows XP пытаются установить драйвер, после того как подсистема Plug and Play (PnP subsystem) обнаружит новое устройство. Диспетчер Plug and Play, предназначенный для работы в пользовательском режиме (UMPNPMGR, системная динамически загружаемая библиотека %SystemRoot%\System32\Umpnpmgr.dll) ожидает, когда подсистема РnР режима ядра уведомит ее об обнаружении нового устройства. Получив такое уведомление, UMPNPMGR ищет информационный файл драйвера устройства (файл с расширением INF), в котором содержится информация, необходимая для установки драйвера. Все файлы INF для драйверов, имеющихся в составе дистрибутива Windows 2000/XP, располагаются в каталоге %SystemRoot%\WF. Если вы устанавливаете драйвер OEM, то его INF-файл должен находиться на дистрибутивном носителе, полученном от поставщика устройства (как правило, это либо 3-дюймовая дискета, либо компакт-диск).
Еще один способ установки драйвера устройства — использование Мастера установки аппаратных средств (Hardware Installation Wizard, %SystemRoot%\System32\Newdev.dll). Мастер установки аппаратных средств выполняет аналогичные шаги и тоже ищет файл INF устанавливаемого драйвера.
Как UMPNPMGR, так и мастер установки аппаратных средств используют интерфейс прикладного программирования установки (SETUPAPI — %SystemRoot%\System32\Setupapi.dll) для чтения информации, содержащейся в файле с расширением INF. Помимо обработки инструкций по установке драйвера, в Windows 2000/XP в обязательном порядке проводится проверка значения параметра реестра Policy, расположенного под ключом HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing (рис. 6.7). Если такой параметр отсутствует, то выполняется проверка параметра Policy, расположенного В составе ключа HKEY_CURRENT_USER\Software\Microsoft \Driver Signing (рис. 6.8).
Это именно те параметры, которые устанавливаются в диалоговом окне Параметры подписывания драйвера (Driver Signing Options). Если вы зарегистрировались в системе под именем Администратор (Administrator) и даете указание использовать установленную опцию по умолчанию, то параметр Policy будет установлен под ключом HKEY_LOCAL_MACHINE; в противном случае — под ключом HKEY_CURRENT_USER. В первую очередь выполняется проверка параметра Policy, расположенного в составе ключа HKEY_LOCAL_MACHINE (если установлено, именно оно будет иметь приоритет перед значениями, заданными индивидуально для каждого пользователя). Если параметр Policy имеет значение, равное 0, это соответствует опции установки драйверов, не имеющих цифровой подписи. Если для этого параметра установлено значение 1, то такие драйверы будут устанавливаться с выводом предупреждающего сообщения, а если установлено значение 2, все драйверы, не имеющие цифровой подписи, станут игнорироваться.
Если политика, действующая в отношении установки драйверов, не имеющих цифровой подписи, диктует необходимость проверки цифровой подписи, то библиотека Setupapi.dll обращается к криптографическим сервисам CryptoAPI для расшифровки цифровой подписи с использованием открытого ключа VeriSign.
Где же хранятся цифровые подписи, защищающие драйверы и системные файлы Windows 2000/XP? Microsoft хранит цифровые подписи драйверов, входящих в состав дистрибутива Windows 2000, в файлах каталога (catalog files), хранящихся в папке %SystemRoot%\System32\CatmoL Драйверы устройств OEM должны поставляться вместе с их собственными файлами каталога, которые Microsoft предоставит фирме-разработчику после успешного тестирования устройства и включения его в список совместимых аппаратных средств (Hardware Compatibility List, HCL). В каталоге \Catroot содержится мастер-индекс файлов каталога драйверов (sysmast.cbd и sysmast.cbk) и вложенная папка, имя которой представляет собой длинную комбинацию букв и цифр. Раскрыв эту папку, вы обнаружите файлы каталога для всех встроенных компонентов. Особого внимания заслуживают файлы NT5.CAT и NT5INF.CAT, которые хранят цифровые подписи для системных файлов Windows 2000/XP.
Если результат расшифровки цифровой подписи драйвера или системного файла не совпадет с цифровой подписью, найденной в файле каталога драйверов, или если драйвер не имеет файла каталога, то, в зависимости от установленных опций, или пользователь получит предупреждающее сообщение, или же установка драйвера завершится неудачей.