Директива INF AddReg
Директива AddReg ссылается на один или несколько определяемых inf-writer _add-registry-sections*, которые используются для изменения или создания сведений о реестре.
[DDInstall] |
[DDInstall.HW] |
[DDInstall.CoInstallers] |
[ClassInstall32] |
[ClassInstall32.ntx86] |
[ClassInstall32.ntia64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntamd64] | (Windows XP and later versions of Windows)
[ClassInstall32.ntarm] | (Windows 8 and later versions of Windows)
[ClassInstall32.ntarm64] | (Windows 10 version 1709 and later versions of Windows)
[install-interface-section] |
[service-install-section] |
[event-log-install] |
[add-interface-section]
AddReg=add-registry-section[,add-registry-section] ...
Каждый раздел add-registry-section может содержать записи для выполнения следующих действий:
Добавьте в реестр новые ключи, возможно, с начальными записями значений.
Добавьте новые записи значений в существующие разделы реестра.
Измените существующие записи значений определенных разделов в реестре.
Каждый именованный раздел add-registry-section , на который ссылается директива AddReg , имеет следующий формат:
[add-registry-section]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
reg-root,[subkey],[value-entry-name],[flags],[value][,[value]]
...
[[add-registry-section.security]
"security-descriptor-string"]
Раздел add-registry-section может содержать любое количество записей, каждая из которых размещена в отдельной строке. Inf также может содержать один или несколько необязательных разделов add-registry-section.security, каждый из которых указывает дескриптор безопасности, который применяется ко всем значениям реестра, описанным в именованном разделе add-registry-section.
Записи
reg-root
Определяет корень дерева реестра для других значений, указанных в этой записи. Он может иметь одно из следующих значений:
HKCR
Сокращение для HKEY_CLASSES_ROOT
HKCU
Сокращение для HKEY_CURRENT_USER
HKLM
Сокращение для HKEY_LOCAL_MACHINE
HKU
Сокращение для HKEY_USERS
HKR
Относительный корень, в котором ключи, указанные с помощью этой аббревиатуры, относятся к разделу реестра, связанному с разделом INF, в котором указана эта директива AddReg , как показано в следующей таблице.
Раздел INF, содержащий директиву AddReg | Раздел реестра, на который ссылается HKR |
---|---|
Раздел INF DDInstall | Программный ключ устройства |
Inf DDInstall. Раздел HW | Аппаратный ключ устройства |
Inf [service-install-section] section | Ключ служб |
Раздел INF [event-log-install] | Ключ EventLog |
INF [add-interface-section] section | Раздел реестра интерфейса устройства |
Примечание
HKR нельзя использовать в разделе реестра надстроек, на который ссылается раздел DefaultInstall INF.
Дополнительные сведения о драйвере, которые хранятся в корневом каталоге HKEY_LOCAL_MACHINE , см. в разделе Деревья и ключи реестра для устройств и драйверов.
Подраздел
Это необязательное значение, сформированное в виде токена %strkey%, определенного в разделе Strings inf или в виде пути реестра в заданном корневом каталоге реестра (key1\key2\key3...), указывает одно из следующих значений:
- Новый подраздел, добавляемый в реестр в конце заданного пути реестра.
- Существующий подраздел, в который записываются дополнительные значения, указанные в этой записи (возможно, заменяя значение существующей записи именованного значения данного подраздела).
- Как новый подраздел, добавляемый в реестр, так и его начальная запись значения.
value-entry-name
Это необязательное значение либо присваивает имя существующей записи значения в заданном (существующем) подразделе , либо создает имя новой записи значения, добавляемой в указанный подраздел, независимо от того, существует ли она или является новым разделом для добавления в реестр. Это значение может быть выражено либо в виде строкив кавычках, либо в виде токена %strkey%, определенного в разделе Строки INF. (Если это опущено для значения строкового типа, значение-entry-name является записью "неименованное" значение по умолчанию для этого ключа.)
Операционная система поддерживает некоторые определяемые системой специальные ключевые слова value-entry-name . Дополнительные сведения см. в конце этого раздела Примечания .
flags
Это необязательное шестнадцатеричное значение, выраженное в виде битовой маски ORed, определяемой системой значений низких слов и высоких меток слов, определяет тип данных для записи значения и (или) управляет операцией добавления реестра.
Ниже приведены значения битовой маски для каждого из этих флагов.
0x00000001 (FLG_ADDREG_BINVALUETYPE)
Данное значение является "необработанными" данными. (Это значение идентично FLG_ADDREG_TYPE_BINARY.)
0x00000002 (FLG_ADDREG_NOCLOBBER)
Запретить заданному значению заменить значение существующей записи значения.
0x00000004 (FLG_ADDREG_DELVAL)
Удалите указанный подраздел из реестра или удалите указанное значение-entry-name из указанного подраздела реестра.
0x00000008 (FLG_ADDREG_APPEND)
Добавьте заданное значение к значению существующей записи именованного значения. Этот флаг действителен, только если также задан FLG_ADDREG_TYPE_MULTI_SZ. Указанное строковое значение не добавляется, если оно уже существует.
0x00000010 (FLG_ADDREG_KEYONLY)
Создайте указанный подраздел, но игнорируйте любые указанные значения value-entry-name и /или значение.
0x00000020 (FLG_ADDREG_OVERWRITEONLY)
Сбрасывать указанное значение только в том случае, если указанное значение-entry-name уже существует в заданном подразделе.
0x00001000 (FLG_ADDREG_64BITKEY)
(Windows XP и более поздние версии Windows.) Внесите указанные изменения в 64-разрядный реестр. Если этот параметр не указан, изменения вносятся в собственный реестр.
0x00002000 (FLG_ADDREG_KEYONLY_COMMON)
(Windows XP и более поздние версии Windows.) Это то же самое, что и FLG_ADDREG_KEYONLY но также работает в разделе del-registryдирективы INF DelReg.
0x00004000 (FLG_ADDREG_32BITKEY)
(Windows XP и более поздние версии Windows.) Внесите указанные изменения в 32-разрядный реестр. Если этот параметр не указан, изменения вносятся в собственный реестр.
0x00000000 (FLG_ADDREG_TYPE_SZ)
Указанные значения и /или значения имеют тип REG_SZ.
Примечание
Это значение является типом по умолчанию для указанной записи значения, поэтому значение флагов можно опустить в любой строке reg-root= в разделе надстройки реестра , который работает с записью значения этого типа.
0x00010000 (FLG_ADDREG_TYPE_MULTI_SZ)
Указанная запись значения и /или значение имеет тип реестра REG_MULTI_SZ. Следующее поле значения может быть списком строк, разделенных запятыми. Эта спецификация не требует признака конца NULL для заданного строкового значения.
0x00020000 (FLG_ADDREG_TYPE_EXPAND_SZ)
Указанные значения value-entry-name и(или ) имеют тип реестра REG_EXPAND_SZ.
0x00010001 (FLG_ADDREG_TYPE_DWORD)
Указанные значения value-entry-name и/или имеют тип реестра REG_DWORD.
0x00020001 (FLG_ADDREG_TYPE_NONE)
Указанные значения value-entry-name и(или ) имеют тип реестра REG_NONE.
value
При необходимости указывается новое значение для указанного значения value-entry-name , которое будет добавлено в указанный раздел реестра. Такое значение может быть "заменой" для существующей записи именованного значения в существующем ключе, значением, которое должно быть добавлено (значение флага0x00010008) к существующей записи именованного REG_MULTI_SZ значения в существующем ключе, новой записи значения, записываемой в существующий ключ, или начальной записью значения для нового подраздела , добавляемого в реестр.
Выражение такого значения зависит от типа реестра, указанного для флага, следующим образом:
Значение типа строки реестра может быть выражено как "строка в кавычках" или в виде токена %strkey%, определенного в разделе Strings INF-файла. Такое указанное inf-значение не обязательно включать признак конца NULL в конце каждой строки.
Значение числового типа реестра может быть выражено в виде шестнадцатеричного (с помощью нотации 0x) или десятичного числа.
security-descriptor-string
Задает дескриптор безопасности, применяемый ко всем записям реестра, созданным с помощью с именем add-registry-section.
Строка security-descriptor-string — это строка с токенами для указания компонента безопасности DACL (D:).
Если раздел add-registry-section.security не указан, записи реестра наследуют параметры безопасности родительского раздела.
Если указан раздел add-registry-section.security, необходимо включить следующие элементы ACE, чтобы можно было устанавливать и обновлять устройства и системные пакеты обновления:
- (A;; GA;;; SY) — предоставляет весь доступ к локальной системе.
- (A;; GA;;; BA) — предоставляет полный доступ встроенным администраторам.
Не указывайте строки ACE, которые предоставляют доступ на запись непривилегированных пользователей.
Сведения о строках дескриптора безопасности см. в разделе Язык определения дескриптора безопасности (Windows). Сведения о формате строк дескриптора безопасности см. в разделе Язык определения дескрипторов безопасности (Windows).
Дополнительные сведения о том, как указать дескрипторы безопасности, см. в разделе Создание безопасных установок устройств.
Комментарии
Директиву AddReg можно указать в любом из разделов, показанных в инструкции формального синтаксиса выше. Эту директиву также можно указать в любом из следующих разделов, определенных inf-writer:
Service-install-section или event-log-install section, на который ссылается директива AddService в INF DDInstall. Раздел "Службы".
Раздел интерфейса надстройки, на который ссылается директива AddInterface в INF DDInstall. Раздел "Интерфейсы".
Раздел интерфейса установки, на который ссылается раздел ИНТЕРФЕЙСА INFInstall32.
Каждое имя раздела add-registry-section должно быть уникальным для INF-файла, но на него могут ссылаться директивы AddReg в других разделах того же INF-файла. Имя каждого раздела должно соответствовать общим правилам для определения имен разделов, описанным в разделе Общие правила синтаксиса для ФАЙЛОВ INF.
Примечание
Бит нижнего порядка нижнего слова в значении флага различает символьные и двоичные данные.
Чтобы представить номер типа реестра, отличный от одного из предопределенных типов REG_XXX, укажите новый номер типа в высоком слове флага ORed с FLG_ADDREG_BINVALUETYPE в нижнем слове.
Данные для такого значения должны быть указаны в двоичном формате в виде последовательности байтов, разделенных запятыми. Например, для хранения 16 байт данных нового типа данных реестра, такого как 0x38, в качестве значения запись раздела надстройки реестра будет выглядеть примерно так:
HKR,,MYValue,0x00380001,1,0,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Этот метод можно использовать для определения новых типов реестра для числовых значений, но не для значений типа REG_EXPAND_SZ, REG_MULTI_SZ, REG_NONE или REG_SZ. Дополнительные сведения об этих типах см. в разделе Типы значений реестра.
Специальные ключевые слова value-entry-name
Специальные ключевые слова определяются для использования в записях HKR AddReg . Формат записей, использующих эти ключевые слова, выглядит следующим образом:
[HKR,,DeviceCharacteristics,0x10001,characteristics]
[HKR,,DeviceType,0x10001,device-type]
[HKR,,Security,,security-descriptor-string]
[HKR,,UpperFilters,0x10000,service-name]
[HKR,,LowerFilters,0x10000,service-name]
[HKR,,Exclusive,0x10001,exclusive-device]
[HKR,,EnumPropPages32,,"prop-provider.dll,provider-entry-point"]
[HKR,,LocationInformationOverride,,"text-string"]
[HKR,,ResourcePickerTags,,"text-string"]
[HKR,,ResourcePickerExceptions,,"text-string"] ,
Ниже описаны записи HKR AddReg , использующие эти специальные ключевые слова:
DeviceCharacteristics
Запись DeviceCharacteristics HKR AddReg указывает характеристики устройства. Значение характеристик является числовым значением, которое является результатом использования ИЛИ для одного или нескольких значений характеристик файла FILE_*, которые определены в Wdm.h и Ntddk.h.
В INF можно указать только следующие значения:
#define FILE_REMOVABLE_MEDIA 0x00000001
#define FILE_READ_ONLY_DEVICE 0x00000002
#define FILE_FLOPPY_DISKETTE 0x00000004
#define FILE_WRITE_ONCE_MEDIA 0x00000008
#define FILE_DEVICE_SECURE_OPEN 0x00000100
Описание этих значений см. в разделе IoCreateDevice.
Значения характеристик, которые задаются с помощью записи DeviceCharacteristics , являются ORed с теми, которые указаны в каждом вызове IoCreateDevice , который создает объект устройства в стеке устройств. Операция ИЛИ выполняется после добавления всех объектов устройства, но до запуска устройства.
Значение характеристик (включая нулевое значение) переопределяет любые характеристики устройства для всего класса, указанные в связанном инсталляторе класса INF.
Дополнительные сведения о характеристиках устройства см. в разделе Указание характеристик устройства.
DeviceType
Запись DeviceType HKR AddReg указывает тип устройства для устройства. Тип устройства — это числовое значение константы FILE_DEVICE_XXX, определенной в Wdm.h или Ntddk.h. Значение флага 0x10001 указывает, что значение типа устройства является REG_DWORD. Дополнительные сведения см. в разделе Указание типов устройств.
Inf-файл установщика класса должен указывать тип устройства, который применяется ко всем или почти ко всем устройствам в классе . Например, если устройства в классе имеют тип FILE_DEVICE_CD_ROM, укажите тип устройства 0x02. Если inf устройства указывает значение deviceType, оно переопределяет значение, заданное установщиком класса, если таковое имеется. Если в inf-файле класса или устройства указано значение DeviceType , диспетчер PnP применяет этот тип к физическому объекту устройства (PDO), созданному драйвером шины устройства.
Безопасность
Запись Security HKR AddReg указывает дескриптор безопасности для устройства.
Строка security-descriptor-string — это строка с токенами для указания компонента безопасности DACL (D:).
Inf установщика класса может указать дескриптор безопасности для класса устройства. Inf устройства может указать дескриптор безопасности для отдельного устройства, переопределяя безопасность для класса . Если в inf-файле класса или устройства указана строка дескриптора безопасности, диспетчер PnP распространяет дескриптор на все объекты устройства ( DOS) для устройства. К ним относятся объект устройства-функции (FDO), необязательные DOS фильтра и PDO.
Сведения о формате строк дескриптора безопасности см. в документации по Microsoft Windows SDK.
Дополнительные сведения о том, как указать дескрипторы безопасности, см. в разделе Создание безопасных установок устройств.
Верхние фильтра
Запись AddReg HKR UpperFilters указывает драйвер верхнего фильтра PnP. Эта запись в объекте DDInstall. В разделе HW определяется один или несколько драйверов верхнего фильтра для конкретного устройства. В разделе ClassInstall32 эта запись определяет один или несколько драйверов верхнего фильтра для всего класса.
Нижние фильтры
Запись HKR AddReglowerFilters указывает драйвер нижнего фильтра PnP. Эта запись в объекте DDInstall. В разделе HW определяется один или несколько драйверов нижнего фильтра для конкретного устройства. В разделе ClassInstall32 эта запись определяет один или несколько драйверов нижнего фильтра для всего класса.
Монопольный доступ
Монопольная запись HKR AddReg, если она существует и имеет значение "1", указывает, что устройство является монопольным. В противном случае устройство не рассматривается как монопольное. Дополнительные сведения см. в разделе Указание монопольного доступа к объектам устройств.
EnumPropPages32
Запись EnumPropPages32 HKR AddReg указывает имя файла библиотеки динамической компоновки (DLL), который является поставщиком страниц свойств для конкретного устройства. Он также указывает имя функции обратного вызова ExtensionPropSheetPageProc , реализованной библиотекой DLL. Дополнительные сведения о страницах свойств и функциях см. в пакете sdk microsoft Windows для Windows 7 и платформа .NET Framework 4.0.
Важно!
Имя функции обратного вызова DLL и ExtensionPropSheetPageProc должны быть заключены в кавычки (" ").
LocationInformationOverride
(Windows XP и более поздние версии Windows) Запись AddReg LocationInformationOverride HKR можно использовать для указания текстовой строки, описывающей физическое расположение устройства. Он переопределяет строку LocationInformation , которую водитель шины устройства предоставляет в ответ на запрос IRP_MN_QUERY_DEVICE_TEXT .
ResourcePickerTags
Запись ResourcePickerTags HKR AddReg указывает теги средства выбора ресурсов для устройства.
ResourcePickerExceptions
Запись AddReg HKR ResourcePickerExceptions указывает конфликты ресурсов, разрешенные для устройства.
Примеры
Директива AddReg ссылается на раздел (SCSI) Miniport_EventLog_AddReg в этом примере в разделе, определяемом inf-writer, на который ссылается директива AddService в DDInstall. Раздел "Службы " этого INF-файла.
[Miniport_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll"
; double quotation marks delimiters in preceding entry prevent truncation
; if line wraps
HKR,,TypesSupported,0x00010001,7
Обратите внимание, что можно указать значения флагов в шестнадцатеричном формате, как показано в примере, или определить заполнители строк, например %FLG_ADDREG_TYPE_DWORD%
в разделе [Строки] каждого INF-файла.