Создание ветвей реестра

Создание ветвей реестра

Например, в начальном блоке может находиться ключевое слово AddReg, указывающее на блоки INF-файла, описывающие добавляемые или изменяемые параметры и ветви реестра. Рассмотрим формат этого ключевого слова на примере листинга 15.1. В данном листинге приведен пример редактирования DWORD-параметра AutoRun из ветви реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesCdrom. В примере этому параметру присваивается значение 0, то есть отключается возможность автоматического запуска дисков. 

Листинг 15.1. Редактирование параметров реестра

[version]

Signature="$CHICAGO$"

[DefaultInstall]

AddReg=AR_off

[AR_off]

HKLM, "SYSTEMCurrentControlSetServicesCdrom","Autorun",0x10001,0

Как видно из листинга 15.1, в блоке для редактирования ветвей реестра (в ключевом слове AddReg можно через запятую указать несколько блоков для редактирования ветвей реестра) описываются сами ветви реестра и параметры, в них изменяемые. Формат их описания таков:

«корневой раздел», «ветвь реестра», «параметр», «флаг типа параметра», «новое значение параметра» 

Рассмотрим этот формат подробнее.

? Корневой раздел — здесь содержится ключевое слово, определяющее корневой раздел реестра, в котором расположен изменяемый параметр. Возможны следующие значения:

 • HKCU — определяет корневой раздел HKEY_CURRENT_USER;

 • HKLM — HKEY_LOCAL_MACHINE;

 • HKU — HKEY_USERS;

 • HKCR — HKEY_CLASSES_ROOT;

 • HKCC — HKEY_CURRENT_CONFIG.

? Ветвь реестра — определяет остальной путь к ветви реестра, включающей в себя изменяемый параметр. Если ветвь реестра содержит пробелы, то ее нужно взять в кавычки.

? Параметр — указывает изменяемый параметр реестра. Если название параметра содержит пробелы, то его нужно взять в кавычки. Если название параметра указано не будет, то будет изменено значение параметра (По умолчанию).

? Флаг — определяет как тип параметра, так и в некоторых случаях дополнительные сведения о том, что же нужно делать с аналогичным параметром в реестре, если он уже существует. Флаг представляет собой битовую маску. Рассмотрим некоторые состояния этой битовой маски.

 • 0x00000000 — тип REG_SZ.

 • 0x00000001 — REG_BINARY.

 • 0x00010000 — REG_MULTI_SZ.

 • 0x00020000 — REG_EXPAND_SZ.

 • 0x00010001 — DWORD.

 • 0x00020001 — NONE.

 • 0x00000002 — если изменяемый параметр уже существует в реестре, то изменять его значение запрещено.

 • 0x00000004 — удалить раздел или параметр из реестра. Иными словами, в INF-файле можно обойтись даже без специального ключевого слова для описания блока удаления, который будет рассмотрен далее. Удалить параметр можно и с помощью блока редактирования параметров.

 • 0x00000008 — только для параметров REG_MULTI_SZ-типа. Указанное в строке редактирования параметра значение не заменяет существующее значение, а добавляется к существующему значению параметра.

 •  0x00000010 — создать раздел, но игнорировать создание или редактирование указанного в строке параметра. Вообще, если посмотреть на возможные значения данного флага, то можно подумать, что Microsoft намеревается создать целый язык сценария с условными значениями и переменными для INF-файла. Иначе зачем вообще нужны два только что рассмотренных значения флага, если аналогичные действия можно выполнить и без их использования?

 • 0x00000020 — изменить значение параметра, только если данный параметр уже существует в реестре.

? Значение параметра — определяет новое значение параметра.

Теперь рассмотрим пример INF-файла, добавляющего в реестр значения параметров. Пример, отображенный в листинге 15.2, является частью стандартного INF-файла Windows XP, предназначенного для настройки отключения автозапуска дисков для разных типов приводов компакт-дисков. В примере параметру Autorun присваивается значение только в том случае, если он не существует в реестре. А значение параметра AutoRunAlwaysDisable, имеющего тип REG_MULTI_SZ, формируется в несколько приемов, чтобы обеспечить хранение значений параметра в разных строках.

Листинг 15.2. Пример использования флагов для редактирования параметров реестра

[version]

Signature="$CHICAGO$"

[DefaultInstall]

AddReg=autorun_addreg

[autorun_addreg]

HKLM,"SystemCurrentControlSetServicescdrom","AutoRun",0x00010003,1

HKLM,"SystemCurrentControlSetServicescdrom","AutoRunAlwaysDisable", 0x00010008, "NEC MBR-7 "

HKLM,"SystemCurrentControlSetServicescdrom","AutoRunAlwaysDisable", 0x00010008, "NEC MBR-7.4 "

HKLM,"SystemCurrentControlSetServicescdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CHANGR DRM-1804X"

HKLM,"SystemCurrentControlSetServicescdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CD-ROM DRM-6324X"

HKLM,"SystemCurrentControlSetServicescdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CD-ROM DRM-624X "

HKLM,"SystemCurrentControlSetServicescdrom","AutoRunAlwaysDisable", 0x00010008, "TORiSAN CD-ROM CDR_C36"