Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах Недокументированные возможности Windows XP. INF. Часть 3


Продолжение, начало в выпусках: 1 2

В конец записи

оцените: 1 2 3 4 5

Книга "Недокументированные возможности Windows XP. Библиотека пользователя", Глава 4. Другие возможности Windows XP. Часть 6. Inf-файлы, Дополнительные возможности.

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

Работа с диалогом Установка/Удаление программ

Одной из интересных возможностей inf-файлов является возможность их использования как для добавления команды в диалог УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ, так и для выполнения процесса деинсталляции при использовании диалога УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ. Давайте рассмотрим простой пример использования inf-файлов для создания так называемого зацикленного элемента диалога УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ, используемого для включения и отключения возможности автоматического запуска дисков. Принцип работы приведенного ниже скрипта прост. При первом своем вызове он копирует себя в папку %systemroot%\inf, отключает автоматический запуск дисков, а также добавляет возможность включения автоматического запуска дисков в диалог УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ. После удаления данного inf-файла с помощью диалога УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ происходит включение автоматического запуска дисков, а также создание в диалоге УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ новой строки, с помощью которой можно опять отключить автоматический запуск диска. То есть, создается постоянный цикл. Конечно, пример с изменением значения одного параметра довольно спорен, ведь намного проще было бы добавить свой флажок в один из стандартных диалогов Windows, поддерживающих добавление в свои списки новых элементов. Но если необходимо при установке параметра также выполнять какие-либо команды, или необходимо модифицировать сразу несколько параметров (например, создать несколько разновидностей настройки оболочки Windows, а потом переходить между ними), тогда данный способ использования inf-файлов может быть незаменим.

Листинг 4.12. Создания цикла в диалоге Установка/Удаление программ
[version]
Signature = $CHICAGO$

[DefaultInstall]
AddReg = AutoRunOff, InstallInf
CopyFiles = infcopy

;ниже мы используем переменную %PATH% для указания изменяемой ветви реестра.
;Переменная, это специальная последовательность символов, которая при
;установке inf-файла будет преобразовываться в строку, определенную для нее
;в стандартном блоке [Strings] (обычно этот блок располагается в самом низу
;inf-файла). Использование переменных позволяет улучшить читабельность
;inf-файлов большого размера, а также предоставляет разработчику возможность
;цетрализованного хранения всех информационных и других строчек программы.
;То есть, вместо того, чтобы искать необходимую для изменения строчку по
;всему содержимому inf-файла, он может описать ее в блоке [Strings]
[AutoRunOff]
HKLM, %PATH%, AutoRun, 0x00010001, 0

;добавляем строку в диалог Установка\Удаление программ. В первой главе
;мы кратко расматривали формат этого диалога.
[InstallInf]
HKLM, %DISPLAY% autorunOnOff,,,
HKLM, %DISPLAY% autorunOnOff, DisplayName,,%NAME_ON%
HKLM, %DISPLAY% autorunOnOff, UninstallString,,\
"rundll32 setupapi, InstallHinfSection DefaultUninstall 132 %17%\primer.inf"

[DefaultUninstall]
AddReg = AutoRunOn

[AutoRunOn]
HKLM, %PATH%, AutoRun, 0x00010001, 1
HKLM, %DISPLAY% autorunOnOff, DisplayName,,%NAME_OFF%
HKLM, %DISPLAY% autorunOnOff, UninstallString,,\
"rundll32 setupapi, InstallHinfSection DefaultInstall 132 %17%\primer.inf"

[infcopy]
primer.inf

[DestinationDirs]
infcopy = 17

[SourceDisksFiles]
primer.inf = 55

[SourceDisksNames]
55 = %DISKNAME%, , 1

;содержит в себе описание переменных, используемых в inf-файле
[Strings]
PATH = "SYSTEM\CurrentControlSet\Services\Cdrom"
DISPLAY = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
NAME_ON = "Восстановить автоматический запуск дисков"
NAME_OFF = "Отключить автоматический запуск дисков"
DISKNAME = "parad0x-des1Gn"

Рисунок 1 Рис. 4.06. Создание команды в диалоге Установка/Удаление программ

Диалог установки компонентов Windows

Отдельной частью диалога УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ является диалог УСТАНОВКА КОМПОНЕНТОВ WINDOWS, который вызывается нажатием на соответствующую кнопку. Как правило, данный диалог содержит в себе сведения не обо всех компонентах Windows, доступных на компьютере. Например, с его помощью нельзя удалить с компьютера стандартные игры, такие как САПЕР или ПАУК. Это происходит потому, что по умолчанию возможность удаления или установки игр скрыта из диалога установки компонентов Windows. Список содержимого диалога УСТАНОВКА КОМПОНЕНТОВ WINDOWS описывается в файле sysoc.inf, расположенном в каталоге %systemroot%\inf. Данный файл содержит в себе блок inf-файла [COMPONENTS]. Данный блок содержит в себе набора строк, определяющих, будет ли отображаться в диалоге отдельный компонент операционной системы Windows XP. Строки имеют следующий формат: «идентификатор»=«библиотека для работы компонентов», «функция библиотеки», «inf-файл, описывающий компоненты»,«отображение компонентов»,«номер».

Наиболее важными элементами данной строки являются следующие.

  • Inf-файл, описывающий компоненты. Содержит в себе писание подразделов, отображаемых в диалоге УСТАНОВКА/УДАЛЕНИЕ ПРОГРАММ. Именно подобный inf-файл мы с амии сейчас и будем создавать.
  • Отображение компонентов. Если в данном поле будет стоять слово HIDE, тогда данный компонент не будет отображаться в диалоге дополнительных компонентов Windows. Чтобы компонент отображался в диалоге, необходимо чтобы это поле было пустым.

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

На рисунке 4.07 показан пример содержимого этого файла.

Рисунок 2 Рис. 4.07. Содержимое файла sysoc.inf

Другой возможностью является добавление в данный диалог своих компонентов. Для этого необходимо сначала создать inf-файл, описывающий новые компоненты, а потом создать в файле sysoc.inf ссылку на созданный inf-файл. Давайте сначала посмотрим на простой пример inf-файла. В этом примере мы создаем сразу корневой подраздел, отображаемых непосредственно в диалоге установки компонентов Windows, два вложенных в этот подраздел подраздела, а также еще два подраздела, которые и будут выполнять установку или удаление компонентов. В нашем случае эти подразделы будут просто скрывать (или отображать, в зависимости от состояния флажка) версию Windows с рабочего стола, а также скрывать (или отображать) название значка МОЙ КОМПЬЮТЕР.

Листинг 4.13. Создание подразделов в диалоге компонентов.
[version]
signature="$Chicago$"

[Optional Components]
TopMain
Interface
Settings
HTMcomputer
Versus

[TopMain]
OptionDesc              = Мои настройки
Tip                     = Варианты настройки интерфейса и конфигурации
IconIndex               = 0

[Interface]
OptionDesc              = Интерфейс Windows
Tip                     = Варианты настройки интерфейса
IconIndex               = 4
Parent                  = TopMain

[Settings]
OptionDesc              = Конфигурация Windows
Tip                     = Варианты настройки конфигурации компьютера
IconIndex               = 16
Parent                  = TopMain

[HTMcomputer]
OptionDesc              = Скрыть название моего компьютера
Tip                     = Скрывает название значока Мой компьютер
IconIndex               = 0
Parent                  = Interface
AddReg               = AddHTM
Uninstall               = HTMUn
Modes                   = 0,1,2,3

[Versus]
OptionDesc              = Отобразить версию на рабочем столе
Tip                     = отображает версию операционной системы на рабочем столе пользователя
IconIndex               = 4
Parent                  = Interface
AddReg               = AddVersion
Uninstall               = VersUn
Modes                   = 0,1,2,3

[AddHTM]
HKCR, "CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder", WantsFORDISPLAY, 0x00010001, 1

[AddVersion]
HKCU, "Control Panel\Desktop", PaintDesktopVersion, 0x00010001, 1

[HTMUn]
DelReg = HTMDel

[VersUn]
AddReg = VersDel

[HTMDel]
HKCR, "CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder", WantsFORDISPLAY

[VersDel]
HKCU, "Control Panel\Desktop", PaintDesktopVersion, 0x00010001, 0

Формат inf-файла для создания компонентов в диалоге установки Windows немного отличается от обычного формата inf-файлов. В–первых, основной блок inf-файла обязательно должен называться [OPTIONAL COMPONENTS] иначе inf-файл работать не будет. Данный блок содержит в себе список других блоков данного inf-файла. Каждый из описанных в блоке [OPTIONAL COMPONENTS] блоков определяет один подраздел в диалоге установки компонентов Windows.

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

  • OPTIONDESC — определяет название подраздела, отображаемого в диалоге УСТАНОВКА КОМПОНЕНТОВ WINDOWS.
  • TIP — определяет подсказку для подраздела, отображаемого в нижней части диалога УСТАНОВКА КОМПОНЕНТОВ WINDOWS.
  • ICONINDEX — определяет индекс иконки, отображаемой напротив данного подраздела в диалоге УСТАНОВКА КОМПОНЕНТОВ WINDOWS. Например, идентификатор 0 определяет значок компьютера, идентификатор 2 — монитора, 14 — принтера.
  • PARENT — определяет название блока inf-файла, подраздел, описываемый которым, будет родителем для нашего подраздела в диалоге установки компонентов Windows. Если данное ключевое слово отсутствует, тогда наш подраздел будет отображаться непосредственно в диалоге установки конфигурации Windows.
  • UNINSTALL — определяет блок inf-файла, вызываемый для данного компонента при установке созданного подраздела (устанавливать можно только подразделы, входящие непосредственно в список диалога установки компонентов (корневые), а не отдельно подразделы, вложенные в корневой), если флажок напротив данного компонента будет сброшен.

Также в блоке установки компонента можно пользоваться такими стандартными ключевыми словами как ADDREG, BITREG, DELREG, COPYFILES и т.д. Все блоки, описанные в этих ключевых словах, будут выполняться при установке флажка напротив соответствующего компонента.

А теперь давайте добавим ссылку на наш компонент в файл sysoc.inf. для этого необходимо в блок [COMPONENTS] добавить строку вида hello=ocgen.dll,OcEntry,prim2.inf,,7. Где test2 определяет идентификатор присоединяемого inf-файла, а prim.inf является названием самого присоединяемого файла. Стоит еще сказать, что созданный нами inf-файл должен находиться в каталоге %systemroot%\inf.

Также в строке указывается название библиотеки и функция из этой библиотеки, которая будет выполнять установку наших компонентов. Как правило, нет никакой разницы между различными функциями различных библиотек. Главное, чтобы они умели работать с диалогом установки компонентов. Поэтому мы выбрали первую попавшуюся в файле sysoc.inf библиотеку и функцию для нее.

На рисунке 4.08 показан результат добавления наших компонентов.

Рисунок 3 Рис. 4.08. Создание разделов диалога

Inf-файл для логического диска

Еще одной возможностью, которую предоставляют inf-файлы, является добавление в контекстное меню логических дисков своих команд, а также изменение значка логического диска. Для этого необходимо создать специальный файл, который должен называться autorun.inf. Созданный inf-файл необходимо поместить в корень логического диска. Давайте рассмотрим пример создания файла autorun.inf.

Листинг 4.14. Пример создания файла autorun.inf
[autorun]
icon = E:\images\fotoo\Art_galery\p.BMP
shell = open
shell\RunPh\command = photoshop.exe
shell\RunPh = Запустить photoshop 

Файл autorun.inf не содержит блока версии inf-файла, но он должен содержать в себе блок [AUTORUN]. Содержимое этого блока довольно просто в понимании, если вы прочитали раздел книги о корневом разделе HKEY_CLASSES_ROOT в главе о реестре. Как можно заметить, ключевые слова, начинающиеся со слова SHELL, являются просто подразделами реестра, которые должны быть добавлены к ветви HKEY_CLASSES_ROOT\DRIVE при отображении контекстного меню данного логического диска, а ключевое слово ICON определяет значок диска. Тем не менее, давайте вспомним содержимое корневого раздела HKEY_CLASSES_ROOT\DRIVE\SHELL и опишем, что же конкретно делают ключевые слова данного файла.

  • shell = open — добавляет в параметр по умолчанию подраздела SHELL строку open. Эта строка говорит о том, что по умолчанию при двойном щелчке на диске диск должен открываться.
  • Shell\RunPh = Запустить photoshop — добавляет в параметр по умолчанию подраздела RUNPH строку Запустить photoshop. Эта строка определяет название команды в контекстном меню нашего диска.
  • Shell\RunPh\command = photoshop.exe — добавляет в параметр по умолчанию подраздела COMMAND строку photoshop.exe. Эта строка определяет команду, которая будет выполняться при выборе из контекстного меню нашего диска соответствующей команды.

Для возможности работы файла autorun.inf необходимо, чтобы параметр типа REG_BINARY NoDriveTypeAutoRun, расположенный в ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, был равен 0.

Заключение

Как можно заметить, с помощью inf-файлов можно выполнить довольно много интересных возможностей. При этом то, что мы с вами рассмотрели, является только каплей в море. Например, с помощью inf-файлов можно также выполнить такие действия, как запуск или остановка служб, назначение прав на доступ к файлам, архивирование реестра и многое другое. При этом Inf-файлы постоянно усовершенствуются и еще неизвестно, что с их помощью можно будет выполнить завтра.

Продолжение следует

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=172

В избранное