[Previous]

Приложение В

Некоторые стандартные параметры описания драйвера в Системном Реестре

В Системном Реестре в разделе HKLM\System\CurrentControlSet\Services сосредоточены описания загружаемых драйверов, представленные набором параметров и/или вложенных подразделов.

После загрузки и запуска драйвера Example.sys, рассмотренного в главе 3, при помощи программы monitor, ранее описанной во 2 главе, можно наблюдать следующие изменения в Системном Реестре (рисунок B-1).

Программа monitor при загрузке драйвера создает в Системном Реестре соответствующий подраздел в HKLM\System\CurrentControlSet\Services с новым именем Example, в который помещает параметры DisplayName, ErrorControl, ImagePath, Start и Туре. Все перечисленные параметры достаточно типичны для описания драйверов в Системном Реестре, поэтому рассмотрим их подробнее.

Рис. В-1
Записи Системного Реестра для драйвера Example.sys

Параметр DisplayName

Значение этого параметра описывает текст, используемый в служебных программах операционной системы, в частности, в программах Панели Управления. В случае, если данный параметр не указан, используется имя драйвера.

Параметр ErrorControl

Параметр ErrorControl (тип REG_DWORD) предписывает операционной системе способ поведения в той ситуации, когда при загрузке и инициализации драйвера (отработке процедуры DriverEntry) произошла ошибка.

Таблица B-1. Значения параметра ErrorControl

Значение Символьное имя
(см. wdm.h, ntddk.h, winnt.h)
Поведение операционной системы
0x0 SERVICE_ERROR_IGNORE В процессе загрузки ошибки игнорируются, загрузка продолжается без уведомления об ошибках в данном драйвере
0x1 SERVICE_ERROR_NORMAL В процессе загрузки ошибки игнорируются, но выводятся сообщения о них, при этом загрузка продолжается
0x2 SERVICE_ERROR_SEVERE Порядок загрузки нарушается и начинается заново с использованием набора параметров LastKnownGood, а если он уже используется, то ошибка игнорируется
0x3 SERVICE_ERROR_CRITICAL

Порядок загрузки нарушается и начинается заново с использованием набора параметров LastKnownGood, а если он уже используется, то загрузка прерывается и выводится сообщение об ошибке

Параметр ImagePath

Значение этого параметра описывает полный путь к файлу, содержащему исполняемый код драйвера. В данном примере, загрузка драйвера была выполнена программой monitor из файла K:\Ex\Example.sys, что и было отражено в значении параметра ImagePath в данном подразделе Реестра. В случае, если данный параметр не указан, то используется значение %system%\Drivers\drivername.sys.

Параметр Start

Значение этого параметра описывает стадию загрузки операционной системы, когда следует загружать данный драйвер.

Таблица B-2. Значения параметра Start

Значение Символьное имя
(см. wdm.h, ntddk.h, winnt.h)
Время загрузки драйвера
0x0 SERVICE_BOOT_START Драйвер запускается загрузчиком NTLDR
0x1 SERVICE_SYSTEM_START Драйвер запускается на стадии загрузки компонентов ядра ОС
0x2 SERVICE_AUTO_START Драйвер будет запущен средствами SCM после загрузки компонентов ядра ОС
0x3 SERVICE_DEMAND_START Драйвер запущен "вручную", то есть по запросу пользовательского приложения при помощи средств SCM (после загрузки ОС)
0x4 SERVICE_DISABLED

Драйвер не может быть запущен

Параметр Туре

Значение этого параметра описывает тип драйвера, некоторые из значений приведены в таблице B-3.

Таблица B-3. Значения параметра Туре

Значение Символьное имя
(см. wdm.h, ntddk.h, winnt.h)
Тип драйвера
0x1 SERVICE_KERNEL_DRIVER Драйвер режима ядра
0x2 SERVICE_FILE_SYSTEM_DRIVER Драйвер файловой системы
0x4 SERVICE_ADAPTER

Драйвер адаптера

Помимо описанных выше часто используемых параметров, используемых для описания драйверов в Системном Реестре, могут встречаться параметры DependOnGroup, DependOnService, Tag, Group, определяющие порядок загрузки, и параметр Parameters, официально предназначенный для хранения частных настроечных параметров.

Параметры подраздела \Enum

Подраздел HKLM\System\CurrentControlSet\Services\drivername\Enum (здесь drivername — имя драйвера) в Системном Реестре присутствует постоянно для драйверов, установленных при помощи Мастера Установки Оборудования. Для драйверов, загружаемых при помощи сервиса SCM, он появляется только после их удачного старта. В этом подразделе присутствуют параметры Count (число обслуживаемых устройств), NextInstance, параметры 0, 1 и т.п.

Рис. В-3
Подраздел \Enum после удачного старта драйвера Example.sys

Параметры 0, 1 и т.п. появляются только для удачно стартовавших драйверов, а их значения указывают на подраздел в HKLM\System\CurrentControlSet\Enum (где отражаются все когда-либо удачно стартовавшие драйвера). Если пойти по указанной в параметре 0 (или 1 и т.п.) ссылке, то можно увидеть в соответствующем подразделе HKLM\System\CurrentControlSet\Enum\...\Control параметр ActiveService, дающий обратную ссылку HKLM\System\CurrentControlSet\Services\drivername. Если одна из этих ссылок в Реестре не существует (прямая или обратная), то это признак того, что драйвер не запустился.