УПРАВЛЕНИЕ РЕЕСТРОМ.Расширение существующих политик
Отнеситесь к созданию ADM-файла, как к созданию небольшой программы. Ведь, по сути, так оно и есть: ADM-фанл — это небольшой сценарий, а редактор политик — интерпретатор, обрабатывающий этот сценарий.
Комментарии
В ADM-файлах, как и в коде программы, могут быть комментарии. Комментарием считается строка, начинающаяся с точки с запятой или с двух прямых слешей: ; Комментарий // это тоже комментарий
Комментарии могут помещаться как в начале, так и в конце строки:
; будем определять политику пользователя CLASS USER CATEGORY Мои политики // определяем категорию
Строковые константы
Вы можете использовать строковые константы так, как было показано в листинге 17.1. Но если строка содержит большое количество символов и в ADM-файле предполагается повторить ее несколько раз, можно создать секцию [strings] и поместить в нее строковые константы. Секция [strings) помещается в самом конце ADM-файла, как это показано в следующем примере: POLICY !!Policy_Name ; константа Policy_name определена в секции [strings]
[strings]
; Обратите внимание: в секции strings
; строковые константы описываются
; без предваряющих символов !!
; Также обратите внимание,
; что строка должна быть заключена в двойные кавычки
Policy_Name=MoH политика
Ключевое слово CLASS
Каждый ADM-файл должен начинаться служебным словом CLASS, за которым следует тип политики, описываемой в ADM-файле: при описании общесистемной политики (параметры реестра будут записываться в раздел HKLM) нркно указать имя класса machine, а при задании пользовательской политики (параметры реестра будут записываться в раздел HKCU) — должно быть указано имя класса user:
CLASS MACHINE; общесистемная политика CLASS USER ; пользовательская политика
В одном ADM-файле может быть несколько ключевых слов class:
CLASS MACHINE
; здесь описываем общесистемные политики
CLASS USER
; тут описываем пользовательские политики
CATEGORY: определение категорий
Сразу после определения класса политики должно следовать служебное слово category. Если class определяет, в каком разделе редактора политик должна находиться наша политика — Конфигурация компьютера или Конфигурация пользователя, — то category определяет подраздел (категорию) выбранного раздела.
Описывается категория так:
CATEGORY имя_категории ; Описание политик END CATEGORY
Каждая категория может содержать ноль или больше политик. Обычно если категория не содержит политик, то она содержит подкатегории (смысла в пустой категории нет). Вот пример описания подкатегории:
CATEGORY Категория
CATEGORY Подкатегория 1
; политики
END CATEGORY
CATEGORY Подкатегория 2
; политики
END CATEGORY END CATEGORY
Определение политик
Политики определяются с помощью служебного слова POLICY. Полный синтаксис определения политик выглядит так:
POLICY лмя_гюлитики
[KEYNAME имя_ключа]
EXPLAIN подсказка
VALUENAME имя_параметра
[описание средств редактирования значений параметра]
END POLICY
Разберемся, что есть что. Имя политики можно указать явно, а можно использовать строку из раздела [strings].
Ключевое слово keyname задает имя раздела реестра, в который будут записаны параметры, изменяемые политикой. HKCU или HKLM указывать не нужно — выбор корневого раздела реестра осуществляется с помощью ключевого слова class, keyname можно описать и в категории, если все политики, относящиеся к одной категории, изменяют значения, которые находятся в одном и том же разделе реестра, например: CATEGORY Категория KEYNAME Software\Policies
CATEGORY Подкатегория 1 ; политики
END CATEGORY
CATEGORY Подкатегория 2 ; политики
END CATEGORY END CATEGORY
Ключевое слово valuename определяет имя параметра, который будет изменен политикой. С помощью служебного слова explain можно указать краткое описание для политики.
А теперь поговорим о самом интересном: о значениях параметров. Как уже отмечалось, если политика простая (то есть параметр может принимать значения включено и выключено), то вам вполне хватит ключевых слов valueon иvalueoff:
Если вы включаете политику, то в реестр будет занесено первое значение (указанное в valueon), а если выключаете, то в реестр помещается второе значение (valueoff). Если же вы выбираете Не задан, то параметр, соответствующий политике, удаляется из реестра.
По умолчанию редактор политик считает, что значения параметра — строковые (REG_SZ), но вы можете указать модификатор numeric для изменения типа параметра на REG_DWORD, например: // строковые значения VALUEON yes VALUEOFF no // целые значения VALUEON 1 VALUEOFF 0
Ho valueon и valueoff подходят только для самых простых значений. Если же значения параметра сложнее, нужно использовать другие средства, о которых мы поговорим в следующих разделах книги.
Ключевое слово actionlist
Для включения некоторых функций нужно изменить сраз\ несколько параметров реестра. В этих случаях вам пригодится ключевое слово actionlist, позволяющее группировать настройки.
Чаще всего используются варианты actionlist — actionliston и actionlistoff. Первый задает список значений, которые нужно изменить при включении политики, а второй — список значений, которые нужно изменить при выключении политики.
Общий синтаксис выглядит так:
ACTIONLIST
[KEYNAME имя_ключа]
VALUENAME имя_параметра
VALUE [модификатор типа] значение
end actionlist
Примечание
Модификатор типа позволяет задать тип параметра. По умолчанию используется REG_SZ, но вы можете изменить его на REG_DWORD, указав в качестве модификатора numeric.
В качестве иллюстрации вышеизложенного рассмотрим небольшой пример (листинг 17.2).
Как видно из листинга 17.2, при включении политики в раздел Software\ Policies добавляются два параметра — First и Second типа REG_SZ со значением 1 (рис. 17.9).
Рис. 17.9. Параметры First и Second
Ключевое слово part: создание элементов интерфейса
Возможностей actionlist иногда бывает не достаточно. Что делать, если нужно указать в реестре произвольное значение: значение, введенное пользователем? В этом случае нам может помочь служебное слово part. С его помощью вы можете организовать поля для ввода текста, выпадающие списки, переключатели и другие элементы интерфейса.
Общий синтаксис использования служебного слова part следующий:
PART имя тип
Ключевые слова
[KEYNAME имя_ключа]
[DEFAULT значение по умолчанию]
VALUENAME имя
END PART
Разберемся, что есть что:
имя — может быть произвольным; оно будет указываться в окне настройки; тип — определяет элемент графического интерфейса:
• edittext — поле для ввода, в которое можно вводить как буквы, так и цифры. Значение имеет тип REG_SZ или REG_EXPAND_SZ;
• numeric — поле, предназначенное только для ввода цифр;
• text — используется для создания подсказок в окне настройки;
• checkbox — отображает независимый переключатель (флажок). Возвращает значение I при установленном флажке и 0 — при снятом;
• сомвовох — список значений с возможностью ввода собственного значения;
• listbox — отображает список с кнопками Добавить/Удалить (используются для добавления и удаления элементов списка);
□ ключевые слова — зависят от выбранного типа элемента интерфейса, мы их рассмотрим чуть позже;
□ ключевое слово default — задает значение по умолчанию. При включении политики редактор политик заполняет элемент интерфейса этим значением;
□ ключевое слово valuename — задает имя параметра реестра. Тип, и значение параметра зависят от типа элемента интерфейса пользователя.
Рассмотрим небольшой пример (листинг 17.3).
г Листинг 17,3. Пример организации окна с полем для ввода
POLICY Третья политика KEYNAME Software\Policies PART Пример EDITTEXT
DEFAULT Текст по умолчанию VALUENAME Test END PART END POLICY
В окне редактора политик соответствующее окно настройки будет выглядеть, как показано на рис. 17.10.
Рис. 17.10. Пример организации окна с полем для ввода
Теперь рассмотрим создание других элементов интерфейса для редактирования значения параметра. Флажок (checkbox) определяется так:
PART имя CHECKBOX DEFCHECKED VALUENAME MyValue END PART
Если указано ключевое слово defchecked, то флажок установлен, а соответ-| ствующему параметру реестра присвоено значение I; если не указано — флажок снят, а параметру передано значение 0. Однако вы можете задать и другие значения, соответствующие включенному и выключенному состоянию флажка (см. листинг 17.4).
Рис. 17.11. Окно настройки с флажками
Все остальные ключевые слова, кроме valuename, указывать не обязательно, но мы все же их рассмотрим:
□ default — задает значение по умолчанию;
□ expandabletext — создает параметр реестра типа REG_EXPAND_SZ вместо REG_SZ;
D maxlength — позволяет задать максимальную длину значения;
О nosort — позволяет отключить сортировку вариантов списка.
Небольшой пример:
PART Параметр СОМВОВОХ
SUGGESTIONS
Вариант1 Вариант2 Третий вариант
END SUGGESTIONS
VALUENAME MyString END PART
Рис. 17.12. Пример использования СОМВОВОХ
Пример использования списка СОМВОВОХ приведен на рис. 17.12.
Ближайшим родственником списка СОМВОВОХ является список LISTBOX. Его синтаксис выглядит так:
PART имя LISTBOX
[EXPANDABLETEXT]
[NOSORT]
[ADDITIVE]
[EXPLICITVALUE|VALUEPREFIX префикс] END PART
С первыми двумя параметрами списка мы уже знакомы, поэтому остановимся на следующих параметрах:
□ additive — перезаписывает содержимым списка значения, уже имеющиеся в реестре;
explicitvalue — позволяет указать имя параметра и его значение. Очень удобный вариант;
D valueprefix — позволяет задать префикс имен параметров. Если вы зададите префикс Start, то будут сгенерированы имена параметров Start 1, Start2 и т. д.
Наверное, вы заметили, что для listbox не нужно указывать valuename. Как вы уже догадались, этот список работает с целым разделом реестра, а не с одним параметром, поэтому ключевое слово valuename просто не нужно. Пример использования listbox приведен в листинге 17.5.
! Листинг 17.5. Политика для редактирования всех значений
POLICY Редактирование всех значений
KEYNAME Software\Policies
EXPLAIN Список для редактирования всех значений из Sofcware\Policies
PART Параметры LISTBOX
EXPLICITVALUE END PART END POLICY
Как выглядит полученный listbox, показано на рис. 17.13.
Следующий тип графического интерфейса — numeric — позволяет создать поле для ввода целых значений со стрелками уменьшения/увеличения значения. Вот его синтаксис:
PART имя NUMERIC
[DEFAULT значение по умолчанию]
[МАХ максимальное значение]
[MIN минимальное значение]
[SPIN шаг]
[TXTCONVERT]
VALUENAME имя_параметра END PART
Параметры min и мах указывают соответственно минимальное и максимальное значения. Параметр spin определяет шаг — значение, на которое будет увеличиваться или уменьшаться счетчик, по умолчанию он равен 1. Если указать txtconvert, to вместо параметра реестра типа REG_DWORD будет использоваться параметр типа REG_SZ. Пример использования numeric:
PART Температура NUMERIC MAX 100 MIN 0 VALUENAME имя_параметра
END PART
Рис. 17.13. Использование LISTBOX
Нам осталось рассмотреть последний элемент пользовательского интерфейса — это text. Он предназначен для ввода в окно настройки статического (постоянного) текста, который может также использоваться в качестве дополнительной подсказки. Данный элемент имеет следующий синтаксис:
PART текст TEXT END PART
Поскольку текст подсказки может быть длинный, целесообразно поместить его в секцию [strings]: PART !!Message TEXT END PART
[strings]
Message=TeKCT подсказки, отображаемый в окне настройки
Отладка
Что произойдет, если вы допустите синтаксическую ошибку? Ничего страшного. Вы просто получите соответствующее сообщение с подробным описанием ошибки и номером строки, где она допущена (рис. 17.14). При этом файл с административным шаблоном не будет загружен, зато будут загружены все остальные ADM-файлы, в которых нет ошибок.
Рис. 17.14. Ошибка
Как видите, в строке 58 я вместо end part написал endpart, пропустив пробел. Редактор политик сообщил суть ошибки, номер строки и ожидаемые значения. Как видите, отладка ADM-файлов проще, чем вы могли подумать! Главное, на что нужно обратить внимание при создании ADM-файлов — это имена ключей и параметров реестра, иначе будете долго удивляться, почему ошибок нет, а нужная политика не работает.
Если прочитаная статья из нашей обширной энциклопедия компьютера - "УПРАВЛЕНИЕ РЕЕСТРОМ.Расширение существующих политик", оказалась полезной или интересной, Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по статье через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!