Недокументированные и малоизвестные возможности Windows XP
Шрифт:
■ Корневой раздел, ветвь реестра и параметр были рассмотрены ранее.
■ Флаг операции — может принимать следующие значения:
• 0x00000000 — сбросить указанный бит;
• 0x00000001 — установить указанный бит;
• 0x00040000 — выполнить эти операции в 32-разрядном реестре.
■ Маска операции — определяет биты в значении параметра, которые должны быть модифицированы. Другими словами, маска должна состоять из восьми нулей или единиц (определяют 8 бит одного байта значения параметра). Все биты, на месте которых в маске указана единица, будут модифицироваться в зависимости от флага операции. Маска указывается в виде битовой маски.
■ Номер
Для примера попробуем изменить отдельные биты параметра Attributes контекстного меню Корзины. После данной модификации в контекстном меню Корзины будут команды Переименовать, Свойства и Удалить. Такие команды, как Копировать, Вырезать, Вставить, будут удалены из контекстного меню Корзины (если они там присутствуют). В результате применения приведенного INF-файла значение DWORD-параметра Attributes станет равным 0x????0070.
ПРИМЕЧАНИЕ
Заметьте, что сначала желательно сбрасывать биты отдельного байта, а потом уже устанавливать другие биты этого байта.
Если в ветви реестра HKEY_CLASSES_ROOT\CLSID\645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder присутствует параметр, имеющий DWORD-тип, CallForAttributes, то ему будет присвоено значение 0 (если в ветви данного параметра не существует, то он и не будет создан).
Создание службы
Еще одной оригинальной возможностью, которой обладают INF-файлы, является упрощенное создание служб на компьютере. Для этого применяется не только ключевое слово AddService, но и специальный стандартный блок INF-файла [DefaultInstall.Services] (то есть к блоку по умолчанию добавляется строка .Services). При этом следует сказать, что этот блок не заменяет стандартный, а дополняет его. Иными словами, если в INF-файле будет два блока, то сначала выполнятся ключевые слова блока [DefaultInstall], а потом блока [DefaultInstall.Services].
Так как вам уже известно, как хранятся сведения о службе в реестре, то будет не сложно понять пример создания службы. По этой причине сначала посмотрим на листинг 15.5, который содержит часть INF-файла, регистрирующего в системе службу Восстановление системы.
Ключевое
слово AddService, в отличие от большинства других, содержит не только название блока INFфайла, описывающего службу, но и некоторые другие сведения. Формат этого ключевого слова следующий:■ Название службы — определяет название раздела в ветви системного реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, в который будет заноситься информация о службе. Как известно, название этого раздела является и названием службы.
■ Тип службы — указывает, является ли данная служба самостоятельной. Может принимать значения 0x01, 0x2 и 0x3.
■ Блок INF-файла — определяет один или несколько блоков INFфайла (в этом случае они пишутся через запятую), в которых определены сведения о службе. В листинге 15.5 первый блок содержит информацию о службе, а второй блок регистрирует возможность записи в системные журналы Windows (оснастка Просмотр событий).
Теперь рассмотрим блок INFфайла для регистрации службы. Он может включать в себя следующие ключевые слова.
■ DisplayName — имя службы, отображаемое в оснастке services.msc.
■ Description — описание службы, отображаемое в оснастке services.msc.
■ ServiceType — тип службы. Значение этого параметра соответствует уже рассмотренному значению параметра реестра Type (см. часть 2).
■ StartType — режим запуска службы. Значение этого параметра соответствует уже рассмотренному значению параметра реестра Start.
■ ErrorControl — действие при возникновении ошибки при запуске службы. Значение этого параметра соответствует уже рассмотренному значению параметра реестра ErrorControl.
■ ServiceBinary — путь и имя файла службы. Значение данного ключевого слова заносится в уже рассмотренный параметр ImagePath реестра.
■ Dependencies — определяет службы, необходимые для работы данной службы. Эти значения заносятся в параметр реестра DependOnService.
■ LoadOrderGroup — определяет группу, к которой принадлежит данная служба. Эти значения заносятся в параметр реестра Group.
Удаление службы
Для удаления службы предназначено ключевое слово DelService, которое также указывается в блоке, названном в формате [«блок удаления».Services]. Удаление службы выполняется намного проще — просто указывается имя службы, которую нужно удалить (название раздела реестра, в котором служба описана).