Как создать файл inf

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


Хотелось бы в этой главе описать некоторые возможности INF-файлов. Здесь не будет полностью рассмотрен язык INF-файлов и способы написания на нем сценариев, но тем не менее попробуем понять, как с помощью INF-файлов можно выполнять копирование и удаление файлов, создание и удаление параметров реестра, а также рассмотрим некоторые интересные возможности INF-файлов.

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

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

Листинг 15.8. Удаление файлов

Signature = $CHICAGO$


;данный раздел будет вызываться с помощьюкоманды rundll32

DelFiles = INFdel


;мы будем удалять файл vfolder.INF

;теперь данный блок указывает не каталог, в который копируются файлы,

;а каталог, из которого удаляются файлы, описанные в блоке

INFdel = 17


vfolder.INF = 55


55 = "имя диска", , 1

Всем привет!

Сегодня я хочу, поговорит о полезности файла « autorun.inf
».  Файл «autorun.inf» используют для быстрого запуска программ, игр и других приложений с CD/DVD диска или USB-накопителей.

Как это работает?
Каждый раз, когда вы вставляете в комп флешку, дискетку, CD/DVD диск, операционная система Windows в первую очередь будет просматривать в самом корне файл «autorun.inf». Если «autorun.inf» присутствует, тогда операционная система прочитывает и запускает весь код, который был прописан в этом фале.

Итак, « autorun.inf
» – это текстовый файл с расширением (.inf), в котором содержатся некоторые команды для автозапуска различных приложений.

AdvancedINF=2.5,"Эта строка будет выводиться, если на компьютере не найдено библиотеки advpack.dll"

Для работы с расширенными INFфайлами необходима библиотека advpack.dll, по умолчанию расположенная в каталоге %systemroot%. Если перед началом выполнения расширенного INFфайла система не найдет данной библиотеки, то она выведет сообщение, указанное в ключевом слове AdvancedINF после запятой. К тому же, как известно, расширенные INFфайлы вызываются с помощью команды rundll32.exe ADVPACK.dll, LaunchINFSectionEx «имя файла», «имя раздела», «имя cab-файла», «флаг». Тогда как обычные INF-файлы вызываются с помощью следующей команды: rundll32.exe setupapi.dll, InstallHINFSection «раздел в файле для начала установки», «флаг», «путь и имя файла».

INF-файлы предназначены для описания начального процесса установки новой программы или оборудования. Каждый INF-файл должен начинаться с заголовка. Этот заголовок определяет версию INF-файла, а также версию операционной системы, для которой этот INF-файл написан. От версии информационного файла (INF-файла) зависят те возможности, которые он поддерживает. Существует две версии INF-файлов — обычные и расширенные. В главе 1 уже рассматривались способы вызова обычных и расширенных INF-файлов. При этом расширенные INF-файлы поддерживают следующие новые возможности (это не все возможности, только основные): выполнение различных программ до или после выполнения INF-файла, архивирование изменяемых значений параметров реестра, а также вывод сообщений перед выполнением INF-файлов или после него.

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

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

Signature = $CHICAGO$


CopyFiles = INFcopy



INFcopy = 17


1.INF = 55


55 = "имя диска", , 1

«блок описания копируемых файлов»=«числовой номер каталога»,«дальнейший путь к каталогу»

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

? 10 — %systemroot%.

? 11 — %systemroot%\system32.

? 17 — %systemroot%\Inf.

? 54 — %systemdrive%.

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

«название копируемого файла»=«уникальный идентификатор диска, на котором находится этот файл»

«уникальный идентификатор диска»=«имя диска»,«метка диска»,«серийный номер диска»
 

Возможности обычных 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.

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

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



DisplayName = "Имяслужбы"

ServiceType = 2

StartType = 0

ErrorControl = 1

ServiceBinary = %12%\sr.sys

LoadOrderGroup = "FSFilter System Recovery"


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

«название службы»,«тип службы», «блок 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.

Как создать файл inf

Цикл подошел к концу. В этой статье я расскажу об еще нескольких способах инсталляции драйверов

(в прошлый раз мы рассмотрели инсталляцию с помощью простого изменения

реесстра (вручную или с использованием .reg – файла) и с использованием программы Monitor из состава Driver Studio) – с помощью inf – файла и с использованием возможностей SCM – менеджера. А последний пункт вплотную подводит нас к написанию собственной консольной проги для тестирования возможностей нашего драйвера. 

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

(а правка нужна для корректной подсветки синтаксиса кода и компиляции). Приступим.

Инсталляция драйвера (продолжение)

В данной статье мы рассмотрим еще два способа инсталляции драйвера: с помощью inf – файла и с использованием возможностей SCM – менеджера. Начнем с первого.

Для того, чтобы мы могли корректно установить наш драйвер с использованием виндошного Мастера Установка, нам необходимо создать inf – файл с правильной структурой. Пример оного вместе с комментариями читай ниже:





Перейдем к SCM – менеджеру. S CM – менеджер – это сервис Windows NT, предоставляющий удобную возможность работать с драйвером без использования Мастера Установки – с помощью функций, вызываемых из пользовательского приложения. Для того, чтобы начать работать с SCM – мененджером, необходимо вызвать функцию OpenSCManager, а для завершения работы – CloseServiceHandle. Но, к сожалению, работать с помощью SCM – менеджера можно не со всеми типами драйверов.

Ну а теперь мы приступим к написанию своего консольного приложения, тестирующего драйвер и использующего SCM – менеджер.

Написание консольного приложения для тестирования драйвера

Во-первых, нужно создать файл Ioctl.h. Его содержимое

(которое, надо думать, тебе знакомо по файлу Driver.h :)):

#ifndef _IOCTL_H_05703_ BASHBD_1UIWQ1_4763_ 1NJKDH256_801_

#define _IOCTL_H_05703_ BASHBD_1UIWQ1_4763_ 1NJKDH256_801_

#define IOCTL_PRINT_DEBUG_ MESS CTL_CODE( \FILE_DEVICE_UNKNOWN, 0x701, METHOD_BUFFERED, FILE_ANY_ACCESS)


#define IOCTL_CHANGE_IRQL CTL_CODE(\

FILE_DEVICE_UNKNOWN, 0x702, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_MAKE_SYSTEM_CRASH CTL_CODE(\

FILE_DEVICE_UNKNOWN, 0x703, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_TOUCH_PORT_378H CTL_CODE(\

FILE_DEVICE_UNKNOWN, 0x704, METHOD_BUFFERED, FILE_ANY_ACCESS)

Вот содержимое файла resource.h:

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_ READONLY_SYMBOLS

#define _APS_NEXT_ RESOURCE_VALUE 101

#define _APS_NEXT_ COMMAND_VALUE 40001

#define _APS_NEXT_ CONTROL_VALUE 1000

#define _APS_NEXT_ SYMED_VALUE 101

#endif

#endif

//Microsoft Developer Studio generated resource script.

//

#include “resource.h”


#define APSTUDIO_READONLY_SYMBOLS

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

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include “afxres.h”

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

// Russian resources

#ifndef _MAC

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

//

// Version

//

#endif // !_MAC

#endif // Russian resources

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

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

// English (U. K.) resources

#ifdef APSTUDIO_INVOKED

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

//

// TEXTINCLUDE

//

1 TEXTINCLUDE MOVEABLE PURE 

BEGIN

“resource.h\0”

END

2 TEXTINCLUDE MOVEABLE PURE 

BEGIN

“#include “”afxres.h””\r\n”

“\0”

END

3 TEXTINCLUDE MOVEABLE PURE 

BEGIN

“\r\n”

“\0”

END

#endif // APSTUDIO_INVOKED

#endif // English (U. K.) resources

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

#ifndef APSTUDIO_INVOKED

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

//

// Generated from the TEXTINCLUDE 3 resource.

//

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

#endif // not APSTUDIO_INVOKED


Ну а теперь головной .cpp – шник программы с комментариями:

Консольное приложение для тестирования драйвера Primer.sys

Заголовочные файлы, которые необходимы данной проге:

#include <windows.h>

#include <stdio.h>

#include <winioctl.h>

#include <tchar.h>


Имя объекта драйвера и местоположение загружаемого файла 

#define DRIVERNAME _T(“Primer”)

//#define DRIVERBINARY _T(“C:\\Primer\\Primer.sys”)

//#define DRIVERBINARY _T(“C:\\Ex\\objchk_w2k\\i386\\Primer.sys”)

#define DRIVERBINARY _T(“C:\\Ex\\tester\\Primer.sys”)


CloseServiceHandle (Service);

return ret;

}


CloseServiceHandle (Service);

return ret;

}

#define SCM_SERVICE ; //
вводим элемент условной компиляции, при помощи 
которого можно отключать использование SCM установки драйвера
в тексте данного приложения.

Основная функция тестирующего приложения.
Здесь диагностике ошибочных ситуаций уделено очень мало внимания.
В реальных приложениях так делать

делаем попытку установки драйвера

res = InstallDriver(scm, DRIVERNAME, DRIVERBINARY);

if(!res) //
неудача, но, быть может, драйвер уже установлен ?

printf(“Cannot install service”);



Вот и все, компиль и тестируй. Напоминаю еще раз: запусти вьювер дебаг-информации из Monitor

(например) и посмотри все дебаговые сообщения драйвера! 

Правка солюшенов визуальной студии

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

(а лучше всего использовать именно его),

считается эталонным. Ниже я привожу текст файла Primer.sln

(Visual Studio 7) (для компиляции не-WDM драйвера):

Ну вот и все. Желаю удачи и интересных находок в плавании по увлекательному океану драйверов и железа! Да не облысеют твои пятки!

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

идентификатор»=«библиотека для работы компонентов», «функция библиотеки», «INF-файл, описывающий компоненты»,«отображение компонентов»,«номер»

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

? INF-файл, описывающий компоненты — описывает разделы, отображаемые в диалоге Установка и удаление программ. Именно такой INF-файл сейчас и будет создан.

? Отображение компонентов — если в данном поле будет стоять слово HIDE, то данный компонент не будет отображаться в диалоге дополнительных компонентов Windows. Чтобы компонент отображался в диалоге, необходимо чтобы это поле было пустым.

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

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

Как создать файл inf

Рис. 15.2 . Содержимое файла sysoc. INF


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

Листинг 15.13. Создание разделов в диалоге компонентов



OptionDesc = Мои настройки

Tip = Варианты настройки интерфейса и конфигурации

IconIndex = 0


OptionDesc = Интерфейс Windows

Tip = Варианты настройки интерфейса

IconIndex = 4

Parent = TopMain


OptionDesc = Конфигурация Windows

Tip = Варианты настройки конфигурации компьютера

IconIndex = 16

Parent = TopMain


OptionDesc = Скрыть название моего компьютера

Tip = Скрывает название значка Мой компьютер

IconIndex = 0

Parent = Interface

AddReg = AddHTM

Uninstall = HTMUn

Modes = 0,1,2,3


OptionDesc = Отобразить версию на Рабочем столе

Tip = отображает версию операционной системы на Рабочем столе пользователя

Parent = Interface

Modes = 0,1,2,3



HKCU, "Control Panel\Desktop", PaintDesktopVersion, 0x00010001, 1


DelReg = HTMDel




HKCU, "Control Panel\Desktop", PaintDesktopVersion, 0x00010001, 0

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

? OptionDesc — определяет название раздела, отображаемого в диалоге Установка компонентов Windows.

? Tip — указывает подсказку для раздела, отображаемого в нижней части диалога Установка компонентов Windows.

? Icon Index — определяет индекс значка, отображаемого напротив данного раздела в диалоге Установка компонентов Windows. Например, идентификатор 0 определяет значок компьютера, идентификатор 2 — монитора, 14 — принтера.

? Parent — указывает название блока INF-файла, описывающего раздел, который будет родителем для нашего раздела в диалоге установки компонентов Windows. Если данное ключевое слово отсутствует, то наш раздел будет отображаться непосредственно в диалоге установки конфигурации Windows.

? Uninstall — определяет блок INF-файла, вызываемый для данного компонента при установке созданного раздела (устанавливать можно только разделы, входящие непосредственно в список диалога установки компонентов (корневые), а не отдельно разделы, вложенные в корневой), если флажок напротив данного компонента будет снят.

В блоке установки компонента можно также пользоваться такими стандартными ключевыми словами, как AddReg, BitReg, DelReg, CopyFiles и т.д. Все блоки, описанные в этих ключевых словах, будут выполняться при установке флажка напротив соответствующего компонента.

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

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

Как создать файл inf

Рис. 15.3. Создание разделов диалога

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

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

Листинг 15.14. Пример создания файла autorun.inf

icon = E:\images\fotoo\Art_galery\p.BMP

shell = open

shell\RunPh\command = photoshop.exe

shell\RunPh = Запустить photoshop

? shell = open — добавляет в параметр (По ум олчанию) раздела shell строку open. Эта строка говорит о том, что по умолчанию при двойном щелчке на диске он должен открываться.

? Shell\RunPh = Запустить photoshop — добавляет в параметр (По умолчанию) раздела RunPh строку Запустить photoshop. Эта строка определяет название команды в контекстном меню нашего диска.

? Shell\RunPh\command = photoshop.exe — добавляет в параметр (По умолчанию) раздела command строку photoshop.exe. Эта строка определяет команду, которая будет выполняться при выборе из контекстного меню нашего диска соответствующей команды. 

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

Хотелось бы в этой главе описать некоторые возможности INF-файлов. Здесь не будет полностью рассмотрен язык INF-файлов и способы написания на нем сценариев, но тем не менее попробуем понять, как с помощью INF-файлов можно выполнять копирование и удаление файлов, создание и удаление параметров реестра, а также рассмотрим некоторые интересные возможности INF-файлов.

Запуск программ до и после установки

Листинг 15.10. Запуск программ до и после установки INF-файла

Signature = $CHICAGO$

AdvancedINF=2.5,"Эта строка будет выводиться, если на компьютере не найдено библиотеки advpack.dll"




"rundll32.exe IEAKENG.dll, DoReboot"

Приведенный в листинге 15.10 INF-файл перед своей установкой вызывает Калькулятор, а потом — стандартный командный интерпретатор Windows. После своей установки он вызовет диалоговое окно с вопросом о перезагрузке компьютера. Конечно, это окно принадлежит Internet Explorer, но зато оно работает.

Вопрос о перезагрузке компьютера можно было вызвать и с помощью флагов вызова INF-файла, но в листинге специально были использованы команды rundll32.exe.

Не забывайте также, что данный INF-файл не выполнится после выбора команды Установить контекстного меню INF-файла. Для его установки придется воспользоваться командой RunDll32 advpack.dll, LaunchINFSection d:\1. INF, DefaultInstall. Здесь d:\1. INF соответствует пути к INF-файлу и его названию. 

Удаление ветвей реестра

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

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

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



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

«корневой раздел», «ветвь реестра», «параметр», «флаг операции удаления», «пример для удаления»
 

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

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

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

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

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

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

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

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

Как создать файл «autorun. inf».

Чтобы создать загрузочный файл «autorun.inf», сделайте такие действия:

1. Откройте . ( Для тех, кто не знает, где найти Блокнот: => => =>
).

2. В Блокноте впишите стандартный код

– этот параметр указывает, какой файл нужно запускать при подключении диска или флешки

– этот параметр служит для отображения иконки (маленькая картинка, логотип) при просмотре дисков через «Мой компьютер».

Как создать файл «autorun.inf»

3. Сохраните в блокноте этот файл как «autorun.inf» в корне флэш или диска.

Если файл и иконку разместить в какую-то папку, например «», тогда в файле autorun нужно указать к ним путь.

Это будет выглядеть следующим образом:

Давайте посмотрим пример, как я использовал «autorun.inf» для DWD-диска. Моей задачей было сделать автоматический запуск программы с красивой иконкой.

Приступим:

1. Я создал файл «autorun.inf» с таким кодом:

2. Все файлы, которые я подготовил для диска вместе с файлом «autorun.inf» я записываю на диск через программу «NERO».

файл  «autorun.inf», WPI.exe, icon.ico должны находиться в корне диска.

Как создать Autorun для диска

Давайте разберем, все то, что я написал.

Когда я вставлю диск в компьютер, автоматически выполнится загрузка файла «», так как в параметрах «» я указал «».

Как создать Autorun для диска

Если зайти и посмотреть на вид диска через «Мой компьютер», можно увидеть красивую иконку, которая тоже загружается автоматически, благодаря параметру «».

Кстати, если вы хотите создать красивые иконки ico
, вы можете прочитать об этом тут
.

Дополнительные возможности файла «autorun.inf».

Запуск
PDF документа и HTML-страницы.


При помощи загрузочного файла «autorun.inf» можно запускать не только приложение «exe», но и файлы PDF или документы HTML-страницы.

Для этого в созданном файле «», пропишите такой код:

Теперь таким же образом, как вы создавали файл «», создайте файл «», и впишите следующий код:

Есть другой вариант с использованием команды :

Еще одна возможность в авторане, в меню автозапуска можно отобразить текст запуска. Для этого следует использовать команду.

Это выглядит вот так:

Если ваши глаза устали видеть надпись и вы желаете ее поменять, то это можно сделать при помощи параметра . Пропишите в файле такой код:

Конечно, изменить на флэшке надписи «Съемный диск» можно и без использования файла Autorun.inf, но это работает только в Windows XP. Думаю, вам эта информация пригодится.

Достаточно нажать правой кнопкой мыши на флэшку и  в открывшемся окне выбрать . Пишите любое название и THE END.

Создание ярлыка файл в меню Пуск

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

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



InfoTip="Это подсказка, отображаемая при наведении указателя на ярлык"

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

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

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

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

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

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

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

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



Как видно из листинга 15.1, в блоке для редактирования ветвей реестра (в ключевом слове AddReg можно через запятую указать несколько блоков для редактирования ветвей реестра) описываются сами ветви реестра и параметры, в них изменяемые. Формат их описания таков:

«корневой раздел», «ветвь реестра», «параметр», «флаг типа параметра», «новое значение параметра»
 

Рассмотрим этот формат подробнее.

? Корневой раздел — здесь содержится ключевое слово, определяющее корневой раздел реестра, в котором расположен изменяемый параметр. Возможны следующие значения:

 • HKLM — HKEY_LOCAL_MACHINE;

 • HKCR — HKEY_CLASSES_ROOT;

 • HKCC — HKEY_CURRENT_CONFIG.

? Ветвь реестра — определяет остальной путь к ветви реестра, включающей в себя изменяемый параметр. Если ветвь реестра содержит пробелы, то ее нужно взять в кавычки.

? Параметр — указывает изменяемый параметр реестра. Если название параметра содержит пробелы, то его нужно взять в кавычки. Если название параметра указано не будет, то будет изменено значение параметра (По умолчанию).

? Флаг — определяет как тип параметра, так и в некоторых случаях дополнительные сведения о том, что же нужно делать с аналогичным параметром в реестре, если он уже существует. Флаг представляет собой битовую маску. Рассмотрим некоторые состояния этой битовой маски.

 • 0x00000000 — тип REG_SZ.

 • 0x00000001 — REG_BINARY.

 • 0x00010000 — REG_MULTI_SZ.

 • 0x00020000 — REG_EXPAND_SZ.

 • 0x00010001 — DWORD.

 • 0x00000002 — если изменяемый параметр уже существует в реестре, то изменять его значение запрещено.

 • 0x00000004 — удалить раздел или параметр из реестра. Иными словами, в INF-файле можно обойтись даже без специального ключевого слова для описания блока удаления, который будет рассмотрен далее. Удалить параметр можно и с помощью блока редактирования параметров.

 • 0x00000008 — только для параметров REG_MULTI_SZ-типа. Указанное в строке редактирования параметра значение не заменяет существующее значение, а добавляется к существующему значению параметра.

 •  0x00000010 — создать раздел, но игнорировать создание или редактирование указанного в строке параметра. Вообще, если посмотреть на возможные значения данного флага, то можно подумать, что Microsoft намеревается создать целый язык сценария с условными значениями и переменными для INF-файла. Иначе зачем вообще нужны два только что рассмотренных значения флага, если аналогичные действия можно выполнить и без их использования?

 • 0x00000020 — изменить значение параметра, только если данный параметр уже существует в реестре.

? Значение параметра — определяет новое значение параметра.

Теперь рассмотрим пример INF-файла, добавляющего в реестр значения параметров. Пример, отображенный в листинге 15.2, является частью стандартного INF-файла Windows XP, предназначенного для настройки отключения автозапуска дисков для разных типов приводов компакт-дисков. В примере параметру Autorun присваивается значение только в том случае, если он не существует в реестре. А значение параметра AutoRunAlwaysDisable, имеющего тип REG_MULTI_SZ, формируется в несколько приемов, чтобы обеспечить хранение значений параметра в разных строках.

Листинг 15.2. Пример использования флагов для редактирования параметров реестра



HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "NEC MBR-7 "

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "NEC MBR-7.4 "

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CHANGR DRM-1804X"

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CD-ROM DRM-6324X"

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CD-ROM DRM-624X "

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "TORiSAN CD-ROM CDR_C36"

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

Это довольно интересная и, можно сказать, уникальная возможность, с помощью которой можно изменить отдельный бит параметра, не изменяя другие его биты. Для реализации этой возможности применяется ключевое слово 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-файлов является возможность их использования как для добавления команды в диалог Установка и удаление программ, так и для выполнения процесса деинсталляции при помощи диалога Установка и удаление программ. Рассмотрим простой пример использования INF-файлов для создания так называемого зацикленного элемента диалога Установка и удаление программ, который применяется для включения и отключения возможности автоматического запуска дисков. Принцип работы приведенного ниже сценария прост. При первом своем вызове он копирует себя в папку %systemroot%\INF, отключает автоматический запуск дисков, а также добавляет возможность включения автоматического запуска дисков в диалог Установка и удаление программ. После удаления данного INF-файла с помощью диалога Установка и удаление программ происходит включение автоматического запуска дисков, а также создание в диалоге Установка и удаление программ новой строки, с помощью которой можно опять отключить автоматический запуск диска. Другими словами, создается постоянный цикл. Конечно, пример с изменением значения одного параметра довольно спорен, ведь намного проще было бы добавить свой флажок в один из стандартных диалогов Windows, поддерживающих добавление в свои списки новых элементов. Но если необходимо при установке параметра также выполнять какие-либо команды или модифицировать сразу несколько параметров (например, создать несколько разновидностей настройки оболочки Windows, а потом переходить между ними), то данный способ использования INF-файлов может быть незаменим (рис. 15.1).

Как создать файл inf

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


Листинг 15.12. Создание цикла в диалоге Установка и удаление программ

Signature = $CHICAGO$


AddReg = AutoRunOff, InstallInf

CopyFiles = INFcopy

;Ниже мы используем переменную %PATH% для указания изменяемой ветви реестра.

;Переменная – это специальная последовательность символов, которая при 

;установке INF-файла будет преобразовываться в строку, определенную для нее

;INF-файла). Использование переменных позволяет улучшить читабельность

;INF-файлов большого размера, а также предоставляет разработчику возможность

;цетрализованного хранения всех информационных и других строчек программы.

;Иными словами, вместо того чтобы искать необходимую для изменения строку

HKLM, %PATH%, AutoRun, 0x00010001, 0


;Добавляем строку в диалог Установка\удаление программ. В первой главе

;мы кратко рассматривали формат этого диалога.

HKLM, %DISPLAY% autorunOnOff,,,

HKLM, %DISPLAY% autorunOnOff, DisplayName,,%NAME_ON%

HKLM, %DISPLAY% autorunOnOff, UninstallString,,\"rundll32 setupapi, InstallHINFSection DefaultUninstall 132 %17%\primer.INF"


AddReg = 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 = 17


primer.INF = 55


55 = %DISKNAME%, , 1

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CD-ROM DRM-624X "

HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "TORiSAN CD-ROM CDR_C36"

NAME_ON = “Восстановить автоматический запуск дисков” «корневой раздел», «ветвь реестра», «параметр», «флаг операции», «маска операции», «номер байта параметра»

NAME_OFF=”Отключить автоматический запуск дисков”

DISKNAME = “parad0x-des1Gn”

Вывод сообщения перед установкой

Перед установкой INF-файла или после нее можно вывести окно сообщения с произвольным текстом. Диалог сообщения, выводимый перед установкой, позволяет эту установку отменить. Он содержит две кнопки — OK и Отмена. Если нажать кнопку Отмена, то установка INF-файла будет отменена. Диалог сообщения, выводимый после установки, является информационным и имеет только одну кнопку — OK.

Чтобы вывести диалоговое окно перед установкой, необходимо воспользоваться ключевым словом BeginPrompt (окно сообщения будет выведено до вызова программ, описанных ключевым словом RunPreSetupCommands), а чтобы вывести окно сообщения после установки, нужно воспользоваться ключевым словом EndPrompt. В листинге 15.11 приведен простой пример использования как окна сообщения, выводимого перед установкой, так и окна сообщения, выводимого после установки. HKLM,"System\CurrentControlSet\Services\cdrom","AutoRunAlwaysDisable", 0x00010008, "PIONEER CD-ROM DRM-6324X"

Листинг 15.11. Вывод окна с произвольным текстом

Signature = $CHICAGO$

AdvancedINF=2.5,"Эта строка будет выводиться, если на компьютере не найдено библиотеки advpack.dll"


RunPreSetupCommands = RunPre



Prompt="Это пример текста, который выведется перед установкой"

Title="Это заголовок для сообщения, которое выведется перед установкой"


Prompt="Это пример текста, который выведется после установки"

Блок для описания сообщения, выводимого перед установкой INF-файла (в данном случае BeginText) содержит следующие ключевые слова.

? Prompt — определяет саму строку выводимого сообщения.

? Title — указывает заголовок окна сообщения. Следует учитывать, что данный заголовок будет использоваться не только для окна сообщения, отображаемого перед установкой, но и для окна сообщения, отображаемого после установки. 

:/>  Все о звукозаписи на Виндовс 10: инструкция, как записывать с микрофона