Вкл\Выкл свет
Обычные INF‑файлы
Основные сведения

Возможности обычных INF‑файлов поддерживаются и расширенными, поэтому эти возможности будут рассмотрены первыми. Обычные INF‑файлы начинаются со следующего заголовка:

При этом после ключевого слова Signature идет описание версии операционной системы, которая будет поддерживать такие INF‑файлы. Если после этого ключевого слова идет слово $WINDOWS NT$, то данный файл написан для операционных систем семейства NT и работать с ним в операционных системах семейства Windows 9x нельзя. Если же после ключевого слова идет слово $CHICAGO$, то данный INF‑файл был написан для операционных систем семейства Windows 9x. При этом работать с этим файлом можно будет и в операционных системах семейства NT.

После заголовка должен идти начальный блок, с которого будет устанавливаться данный INF‑файл. Стало традицией, что этот блок должен иметь название DefaultInstall. К тому же блок именно с таким заголовком ищет система при установке INF‑файла с помощью команды Установить его контекстного меню. Если же предполагается, что создаваемый INF‑файл не должен вызываться с помощью контекстного меню (а только с использованием команды rundll32.exe setupapi. dll, InstallHINFSection), то начальный блок можно указать любой.

В начальном блоке могут содержаться различные ключевые слова, указывающие на другие блоки INF‑файла, с помощью которых выполняется работа с реестром и файловой системой Windows XP.

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

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

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

Как видно из листинга 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. Пример использования флагов для редактирования параметров реестра
Удаление ветвей реестра

Параметр или ветвь реестра можно не только добавить в реестр, но и удалить из него. Для этого применяется ключевое слово DelReg, указывающее на блок INF‑файла, содержащий сведения о ветвях реестра и параметрах, которые нужно удалить. Несмотря на то, что флаг для редактирования параметров позволяет также и удалять параметры, для их удаления рекомендуется все‑таки использовать ключевое слово, так как это более наглядно и позволяет легче понять принцип работы INF‑файла.

Рассмотрим пример удаления параметра. В этом примере из реестра удаляется ветвь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\Shares, чтобы отключить все пользовательские общедоступные папки. При этом сначала нужно удалить все расположенные в данной ветви разделы, чтобы можно было удалить саму ветвь реестра. Как правило, ветвь для хранения сведений об общедоступных папках содержит только один раздел – Security.

ПРИМЕЧАНИЕ

Вообще‑то можно удалять и ветви реестра, хранящие другие разделы, но лучше перестраховаться. На памяти у автора были случаи, когда ветвь реестра не удалялась из‑за того, что в ней содержались вложенные разделы.

Листинг 15.3. Удаление сведений об общедоступных папках

Как можно заметить, содержимое блока для удаления ветвей и параметров реестра похоже на содержимое блока редактирования ветвей и параметров реестра. Строка для удаления ветви или параметра имеет следующий формат:

■ Корневой раздел – указывает на корневой раздел, в котором расположен удаляемый параметр или ветвь реестра.

■ Ветвь реестра – определяет удаляемую ветвь реестра или ветвь, в которой хранится удаляемый параметр.

■ Параметр – определяет название удаляемого параметра. Если параметр отсутствует, то предполагается, что удаляться будет конечный раздел указанной ветви реестра.

■ Флаг операции удаления – может принимать следующие значения:

• 0x00002000 – удалить весь конечный раздел указанной ветви;

• 0x00004000 – произвести указанные изменения в 32‑разрядном реестре;

• 0x00018002 – удаляет из параметра все строки, соответствующие примеру для удаления.

■ Пример для удаления – определяет строку значения параметра, имеющего REG_MULTI_SZ‑тип, все соответствия которой должны быть удалены из параметра.

Редактирование отдельных битов значения параметра

Это довольно интересная и, можно сказать, уникальная возможность, с помощью которой можно изменить отдельный бит параметра, не изменяя другие его биты. Для реализации этой возможности применяется ключевое слово BitReg, указывающее на блок INF‑файла, содержащий сведения об изменяемых битах параметров. При этом блок INF‑файла должен включать в себя строки следующего формата:

■ Корневой раздел, ветвь реестра и параметр были рассмотрены ранее.

■ Флаг операции – может принимать следующие значения:

• 0x00000000 – сбросить указанный бит;

• 0x00000001 – установить указанный бит;

• 0x00040000 – выполнить эти операции в 32‑разрядном реестре.

■ Маска операции – определяет биты в значении параметра, которые должны быть модифицированы. Другими словами, маска должна состоять из восьми нулей или единиц (определяют 8 бит одного байта значения параметра). Все биты, на месте которых в маске указана единица, будут модифицироваться в зависимости от флага операции. Маска указывается в виде битовой маски.

■ Номер байта значения параметр – указывает на байт значения параметра, к которому будет применяться маска и биты которого будут модифицироваться. При этом номер байта зависит от типа параметра. Для параметров DWORD‑типа самый старший байт имеет номер 0, а для параметров REG_BINARY‑типа номер 0 имеет самый младший байт.

Для примера попробуем изменить отдельные биты параметра Attributes контекстного меню Корзины. После данной модификации в контекстном меню Корзины будут команды Переименовать, Свойства и Удалить. Такие команды, как Копировать, Вырезать, Вставить, будут удалены из контекстного меню Корзины (если они там присутствуют). В результате применения приведенного INF‑файла значение DWORD‑параметра Attributes станет равным 0x????0070.

ПРИМЕЧАНИЕ

Заметьте, что сначала желательно сбрасывать биты отдельного байта, а потом уже устанавливать другие биты этого байта.

Если в ветви реестра HKEY_CLASSES_ROOT\CLSID\645FF040‑5081‑101B‑9F08‑00AA002F954E}\ShellFolder присутствует параметр, имеющий DWORD‑тип, CallForAttributes, то ему будет присвоено значение 0 (если в ветви данного параметра не существует, то он и не будет создан).

Листинг 15.4. Пример модификации отдельных битов параметра
Создание службы

Еще одной оригинальной возможностью, которой обладают INF‑файлы, является упрощенное создание служб на компьютере. Для этого применяется не только ключевое слово AddService, но и специальный стандартный блок INF‑файла [DefaultInstall. Services] (то есть к блоку по умолчанию добавляется строка .Services). При этом следует сказать, что этот блок не заменяет стандартный, а дополняет его. Иными словами, если в INF‑файле будет два блока, то сначала выполнятся ключевые слова блока [DefaultInstall], а потом блока [DefaultInstall. Services].

Так как вам уже известно, как хранятся сведения о службе в реестре, то будет не сложно понять пример создания службы. По этой причине сначала посмотрим на листинг 15.5, который содержит часть INF‑файла, регистрирующего в системе службу Восстановление системы.

Листинг 15.5. Пример регистрации службы Восстановление системы

Ключевое слово 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]. Удаление службы выполняется намного проще – просто указывается имя службы, которую нужно удалить (название раздела реестра, в котором служба описана).

Листинг 15.6. Пример удаления службы

В листинге 15.6 ключевое слово DelService указано в блоке [Uninstall. Services], так как именно блок [Uninstall] используется в примере при вызове INF‑файла для удаления службы с помощью команды rundll32.exe.

Копирование файлов

Копирование в INF‑файлах реализовано наиболее сложно. Для его выполнения необходимо не только использовать ключевое слово CopyFiles, но и, кроме того, создать три отдельных блока INF‑файла: DestinationDirs, SourceDisksFiles и SourceDisksNames. Рассмотрим простой пример.

Листинг 15.7. Копирование файлов

В этом примере для описания копируемых файлов используется блок INF‑файла [INFcopy]. Ссылка на него содержится в ключевом слове CopyFiles. В этом блоке находятся только названия файлов, которые должны быть скопированы (если файлов несколько, каждый из них пишется в отдельной строке). Кроме блока [INFcopy], файл обязательно должен хранить и три других стандартных блока INF‑файлов.

Блок [DestinationDirs] определяет каталоги, в которые должны копироваться файлы, описанные в отдельных блоках INF‑файла, предназначенных для описания копируемых файлов. При этом все файлы, описанные в одном блоке INF‑файла, должны копироваться только в один каталог (то есть если бы в нашем блоке [INFcopy] описывалось два файла, например 1.INF и 2.INF, то они оба должны были бы скопироваться в один каталог). Формат определения каталога, в который будут копироваться файлы, следующий:

Числовой номер каталога представляет собой число, идентифицирующее одну из системных папок. Рассмотрим некоторые из этих чисел, а также каталоги, которые они определяют.

■ 10 – %systemroot%.

■ 11 – %systemroot%\system32.

■ 17 – %systemroot%\Inf.

■ 53 – %userprofile%.

■ 54 – %systemdrive%.

■ 1 – говорит о том, что необходимо использовать абсолютный путь, который должен быть записан после числового номера (через запятую). Абсолютным называется путь, который не начинается с числового номера каталога. Например, числовым является путь d:\test\1.

С помощью блока [SourceDisksFiles] осуществляется присваивание каждому копируемому файлу уникального идентификатора, он будет определять в блоке [SourceDisksNames] название диска, с которого копируется файл. Формат строк этого блока следующий:

Блок [SourceDisksNames] определяет диски, на которых находятся копируемые файлы. Формат строк этого блока таков:

Метка диска отображается в диалоге копирования файлов. Эта метка также отображается в диалоге, выводимом, если система не может найти указанные для копирования файлы. В этом случае система попросит вас вставить диск, название которого как раз и указано в блоке [SourceDisksNames].

Удаление файлов

Удаление файлов напоминает их копирование, поэтому рассмотрим этот процесс лишь поверхностно – в подсказках к листингу 15.8. Для определения блоков, содержащих описания удаляемых файлов, используется ключевое слово DelFiles.

Листинг 15.8. Удаление файлов
Создание ярлыка файл в меню Пуск

Это еще одна возможность, которой можно воспользоваться благодаря INF‑файлу. С помощью ключевого слова ProfileItems можно определить блок INF файла, в котором описывается создаваемый в меню Пуск ярлык. Рассмотрим пример, с помощью которого создается ярлык программы Восстановление системы в меню Пуск (Стандартные►Служебные).

Листинг 15.9. Создание ярлыка

Блок для описания ярлыка в меню Пуск может содержать следующие ключевые слова.

■ Name – определяет название создаваемого в меню Пуск ярлыка.

■ CmdLine – указывает путь к программе, для которой создается ярлык. Формат данного ключевого слова немного необычен: «числовой путь к стандартному каталогу, размещение файла, название файла».

■ SubDir – определяет расположение ярлыка в меню Пуск. Если точнее, то данное ключевое слово определяет дальнейший путь к каталогу, который будет содержать ярлык на программу. Дальнейший путь добавляется к пути %systemdrive%\Documents and Settings\All Users\Главное меню\Программы.

■ WorkingDir – указывает рабочие каталоги для программы, на которую создается ярлык (как правило, это ключевое слово не указывается).

■ InfoTip – определяет подсказку, отображаемую при наведении указателя на созданный в меню Пуск ярлык.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Всего комментариев: 0
Имя *:
Email *:
Код *: