[Previous] [Next]

Секция [AddReg]

Секции типа [AddReg] содержат описание действий по внесению новых подразделов и/или параметров и их значений в Системный Реестр, а также действия по модификации значений уже существующих параметров.

Ссылки на секции данного типа могут присутствовать в секциях [DDInstall], [ClassInstall32] и секциях [ServiceInstall] (обозначенных ссылками из директив AddService в секциях [DDInstall.Services]). Кроме того, ссылка на [AddReg] может быть введена и из секций, описывающих установку интерфейса (для организации доступа к объекту устройства по идентификатору интерфейса), что в данной книге не рассматривается. В перечисленных типах секций ссылки на [AddReg] вводятся директивами AddReg. Конкретное имя секций типа [AddReg] зависит от разработчика inf-файла. Каждая запись внутри секции [AddReg] имеет вид

reg-root, [subkey], [value-name], [flag] , [value]

Здесь в поле reg-root следует ввести аббревиатуру одного из корневых разделов Системного Реестра, возможные значения которых перечислены в таблице 12.7. Эти значения указывают на корневые разделы, в чьих подразделах будут сделаны изменения. Поле subkey представляет наименование подраздела внутри указанного корневого раздела. Значении HKR не имеет конкретного, раз и навсегда определенного, значения. Его конечное значение в записях секции [AddReg] зависит от того, из какой секции была сделана ссылка на [AddReg].

Таблица 12.7. Аббревиатуры корневых разделов Системного Реестра

Значения Описание
HKCR HKEY_CLASSES_ROOT
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKU HKEY_USERS
HKR

Контекстный раздел Системного Реестра (то есть какой конкретно раздел Реестра будет модифицирован, зависит от того, в какой секции была сделана ссылка на секцию типа [AddReg])

Значение value-name обозначает имя параметра в модифицируемом подразделе subkey, который (параметр подраздела, то есть) будет добавлен или модифицирован.

Значение flag описывает тип данных, который должен быть сохранен в поле значения параметра данного модифицируемого подраздела Системного Реестра. Возможные значения (из числа применимых в Windows 2000, XP и 2003), которые может принимать поле flag, перечисляются в таблице 12.8.

Таблица 12.8. Основные значение поля flag в записях секции [AddReg]

Значение Символьное имя Описание
0x00000 FLG_ADDREG_TYPE_SZ Строка символов, завершающаяся нулем (значение flag по умолчанию, если это поле в записи опущено)
0x00001 FLG_ADDREG_BINVALUETYPE Бинарные данные
0x00002 FLG_ADDREG_NOCLOBBER Не замещать существующее значение
0x00004 FLG_ADDREG_DELVALUE Стереть подраздел или параметр
0x00010 FLG_ADDREG_KEYONLY Создать подраздел, игнорировать параметр и его значение
0x00020 FLG_ADDREG_OVERWRITEONLY Если параметр существует, заменить, иначе ничего не предпринимать
0x10000 FLG_ADDREG_TYPE_MULTI_SZ

Данные REG_MULTI_SZ (массив строк)

0x00008 FLG_ADDREG_APPEND Присоединить к существующему массиву строк REG_MULTI_SZ. Применим только совместно с FLG_ADDREG_TYPE_MULTI_SZ
0x20000 FLG_ADDREG_TYPE_EXPAND_SZ Данные типа REG_EXPAND_SZ
0x10001 FLG_ADDREG_TYPE_DWORD Данные типа REG_DWORD
0x20001 FLG_ADDREG_TYPE_NONE Данные REG_NONE

Значения flag в inf-файлах должны указываться собственно в числовом значении (символьные имена, указанные в таблице 12.8 не применяются). Однако при желании, для улучшения читаемости inf-файла, можно применять маркеры, например:

[DeviceInstallSection]
AddReg = DeviceAddRegSection

[DeviceAddRegSection]
HKR,, ThisDriver, %REG_DWORD%, 1
HKR,, InstalledDrivers, %REG_MULTI_SZ%, Device0001

[Strings] ; расшифровка значений маркеров
REG_SZ          = 0x00000000
REG_MULTI_SZ    = 0x00010000
REG_EXPAND_SZ   = 0x00020000
REG_BINARY      = 0x00000001
REG_DWORD       = 0x00010001  

Следует помнить, что в том случае, если в полях записей вводится значение, содержащее пробелы или другие специальные символы, то эту группу символов следует заключить в кавычки. Если же значение простое (пусть даже строка), то его заключать в кавычки не обязательно, например:

[MyDriver.Install]
CopyFiles=. . .
AddReg=MyDriver.AddReg

[MyDriver.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,, MyDriver.sys     ; (flag = FLG_ADDREG_TYPE_SZ)

что равносильно

HKR,,"NTMPDriver",,"MyDriver.sys" 

Значения HKR

Аббревиатурой HKR в inf-файлах обозначаются подходящие по контексту подразделы Системного Реестра, применимые для данной операции.

Число типов приемлемых подразделов, на которые мог бы указывать контекстный параметр HKR, невелико, среди которых разработчику драйверов могут понадобиться следующие:

Теперь можно перечислить, куда указывает HKR в записях конкретной секции типа [AddReg], в зависимости от того, какая секция сослалась на данную секцию типа [AddReg], см. таблицу 12.9.

Таблица 12.9. Значение параметра HKR в секциях [AddReg]

Откуда исходит ссылка на [AddReg] Куда указывает HKR
Секция [DDInstall], директива AddReg Драйверный подраздел
Секция [DDInstall.Xxx.Hw], директива AddReg Подраздел экземпляра аппаратуры
Директива AddReg в секции [ServiceInstall], на которую указывает директива AddService секции [DDInstall.Xxx.Services] Сервисный подраздел
Секция [ClassInstall32] или [ClassInstall], директива AddReg Подраздел класса
Секция [DDInstall.Xxx.Coinstallers], директива AddReg

Драйверный подраздел