Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Всё о работе в Интернет" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Секреты Windows: статьи о реестре, rundll32.exe, программах Недокументированные возможности Windows XP. INF. Часть 1
Вот и закончился очередной опрос, результаты которого окажутся судьбоносными для нашего сайта и этой рассылки - "Содержимое какой из книг вы бы хотели прочитать в будущих статьях нашего сайта?". И что вы думаете? Абсолютное большинство посетителей наконец взялось за ум и проголосовало за книгу "Реестр Windows Vista. На 100%" =) Благодарим всех, кто отдал свои голоса за понравившуюся книгу - а тех, кто проголосовал за книгу "Реестр Windows Vista. На 100%" еще и награждаем
первой частью этой книги. Другие наши рассылки: Новости нашего сайта: В
конец записи
оцените: 1 2 3 4 5 Книга "Недокументированные возможности Windows XP. Библиотека пользователя", Глава 4. Другие возможности Windows XP. Часть 4. Inf-файлы, начало. Хотелось бы в этом разделе описать некоторые возможности inf-файлов. Мы не будем полностью описывать язык inf-файлов и способы написания на нем скриптов, но, тем не менее, попробуем понять, как с помощью inf-файлов можно выполнять такие задачи, как копирование и удаление файлов, создание и удаление параметров реестра, а также рассмотрим некоторые интересные возможности inf-файлов. Основы
Inf- файлы предназначены для описания начального процесса установки новой программы или оборудования. Каждый inf-файл должен начинать с заголовка. Этот заголовок определяет версию inf-файла, а также версию операционной системы, для которой этот inf-файл написан. От версии информационного файла (inf-файла) зависят те возможности, которые он поддерживает. Существует две версии inf-файлов — обычные и расширенные inf-файлы. В первой главе книги мы уже рассматривали способы вызова обычных и расширенных inf-файлов. При этом расширенные inf-файлы поддерживают следующие новые возможности (это не все возможности, только основные): выполнение различных программ до или после выполнения inf-файла, архивирование изменяемых значений параметров реестра, а также вывод сообщений перед или после выполнения Inf-файлов. Довольно интересна необходимость знания inf-файлов. Конечно, сейчас inf-файлы заменили пакетами установщика Windows и другими способами описания начальной установки программ. Тем не менее, inf-файлы обладают несколькими интересными возможностями, которые мы рассмотрим далее и которые довольно трудно выполнить без использования inf-файлов. Также с помощью inf-файлов можно работать с реестром, даже когда возможность работы с программой regedit.exe и reg-файлами была отключена с помощью параметра DWORD-типа DisableRegistryTools, расположенного в ветви реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\system. И не следует забывать, что inf-файлы могут использовать системными процессами, то есть, на их основе можно выполнить взлом операционной системы. Обычные inf-файлы Возможности обычных inf-файлов поддерживаются и расширенными, поэтому эти возможности мы рассмотрим первыми. Обычные inf-файлы начинаются со следующего заголовка. [Version] Signature="$WINDOWS NT$" При этом после ключевого слова Signature идет описание версии операционной системы, которая будет поддерживать такие INF-файлы. Если после этого ключевого слова идет слово $WINDOWS NT$, тогда данный файл написан для операционных систем семейства NT, и работать с данным файлом в операционных системах семейства Windows 9x нельзя. Если же после ключевого слова идет слово $CHICAGO$, тогда данный inf-файл был написан для операционных систем семейства Windows 9x. При этом, работать с этим файлом будет можно и в операционных системах семейства NT. После заголовка должен идти начальный блок, с которого будет выполняться установка данного inf-файла. Стало традицией, что данный блок должен называться DefaultInstall. К тому же, именно блок с таким заголовком ищет система при установке inf-файла с помощью команды УСТАНОВИТЬ из контекстного меню inf-файла. Если же предполагается, что создаваемый inf-файл не должен вызываться с помощью контекстного меню (а только с помощью команды rundll32.exe setupapi.dll, InstallHinfSection), тогда начальный блок можно указать любой. В начальном блоке могут содержаться различные ключевые слова, указывающие на другие блоки inf-файла, с помощью которых выполняется работа с реестром и файловой системой Windows XP. Создание ветвей реестра Например, в начальном блоке может находиться ключевое слово AddReg, указывающее на блоки inf-файла, описывающие добавляемые или измененяемые параметры и ветви реестра. Формат этого ключевого слова давайте рассмотрим в примере листинга 4.1. В данном листинге приведен пример редактирования параметра DWORD-типа AUTORUN из ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\CDROM. В примере листинга мы присваиваем этому параметру значение 0, то есть, отключаем возможность автоматического запуска дисков. Листинг 4.1. Редактирование параметров реестра [version] Signature="$CHICAGO$" [DefaultInstall] AddReg=AR_off [AR_off] HKLM, "SYSTEM\CurrentControlSet\Services\Cdrom","Autorun",0x10001,0 Как видно на листинге 4.1, в блоке для редактирования ветвей реестра (в ключевом слове AddReg можно через запятую указать несколько блоков для редактирования ветвей реестра) описываются сами ветви реестра и параметры, в них изменяемые. Формат их описания таков: «корневой раздел», «ветвь реестра», «параметр», «флаг типа параметра», «новое значение параметра». Давайте рассмотрим этот формат подробней. Корневой раздел Здесь содержится ключевое слово, определяющее корневой раздел реестра, в котором расположен изменяемый параметр. Возможны следующие значения этого корневого раздела.
Ветвь реестра Определяет остальной путь к ветви реестра, содержащей изменяемый параметр. Если ветвь реестра содержит пробелы, тогда ее нужно взять в кавычки. Параметр Определяет изменяемый параметр реестра. Если название параметра содержит пробелы, тогда ее нужно взять в кавычки. Если название параметра указано не будет, тогда будет изменено значение параметра по умолчанию. Флаг Флаг определяет как тип параметра, так и, в некоторых случаях, дополнительные сведения о том, что же нужно делать с аналогичным параметром в реестре, если он уже существует. Флаг представляет собой битовую маску. Давайте рассмотрим некоторые состояния этой битовой маски.
Значение параметра Определяет новое значение параметра. А теперь давайте рассмотрим пример inf-файла, добавляющего в реестр значения параметров. Пример, отображенный на листинге 4.2, является частью стандартного inf-файла Windows XP, предназначенного для настройки отключения автозапуска дисков для разных типов CD-ROM приводов. В нем параметру AUTORUN присваивается значение только в том случае, если данный параметр не существует в реестре. А значение параметра AUTORUNALWAYSDISABLE, имеющего тип REG_MULTI_SZ, формируется в несколько приемов, чтобы обеспечить хранение значений параметра в разных строках. Листинг 4.2. Пример использования флагов для редактирования параметров реестра [version] Signature="$CHICAGO$" [DefaultInstall] AddReg=autorun_addreg [autorun_addreg] HKLM,"System\CurrentControlSet\Services\cdrom","AutoRun",0x00010003,1 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" Удаление ветвей реестра Но параметр или ветвь реестра можно не только добавить в реестр, но и удалить из него. Для этого применяется ключевое слово DELREG, указывающее на блок inf-файла, содержащий сведения о ветвях реестра и параметрах, которые нужно удалить. Несмотря на то, что флаг для редактирования параметров, позволяет также и удалять параметры, для их удаления советуется все-таки использовать ключевое слово, так как это более наглядно и позволяет легче понять принцип работы inf-файла. Давайте рассмотрим пример удаления параметра. В этом примере мы удаляем из реестра ветвь HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\LANMANSERVER\SHARES, чтобы отключить все пользовательские расшаренные папки. При этом в начале нужно удалить все расположенные в данной ветви подразделы, чтобы можно было удалить саму ветвь реестра. Как правило, ветвь для хранения сведений о расшаренных папках содержит только один подраздел — SECURITY. Вообще-то, можно удалять и ветви реестра, содержащие в себе другие подразделы, но лучше перестраховаться. На памяти у автора были случаи, когда ветвь реестра не удалялась из-за того, что в ней содержались вложенные подразделы. Листинг 4.3. Удаление сведений о расшаренных папках [version] Signature="$CHICAGO$" [DefaultInstall] DelReg=shared_del [shared_del] HKLM,"SYSTEM\CURRENTCONTROLSET\SERVICES\LANMANSERVER\SHARES\Security" HKLM,"SYSTEM\CURRENTCONTROLSET\SERVICES\LANMANSERVER\SHARES" Как можно заметить, содержимое блока для удаления ветвей и параметров реестра похоже на содержимое блока редактирования ветвей и параметров реестра. Строка для удаления ветви или параметра имеет следующий формат: «корневой раздел», «ветвь реестра», «параметр», «флаг операции удаления», «пример для удаления».
Редактирование отдельных битов значения параметра Это довольно интересная и, можно сказать, уникальная возможность, с помощью которой можно изменить отдельный бит параметра, не изменяя другие его биты. Для реализации этой возможности применяется ключевое слово BITREG, указывающее на блок inf-файла, содержащий сведения об изменяемых битах параметров. При этом блок inf-файла должен содержать в себе строки следующего формата: «корневой раздел», «ветвь реестра», «параметр», «флаг операции», «маска операции», «номер байта параметра».
Для примера давайте попробуем изменить отдельные биты параметра ATTRIBUTES контекстного меню КОРЗИНЫ. После данной модификации в контекстном меню КОРЗИНЫ будут команды ПЕРЕИМЕНОВАТЬ, СВОЙСТВА и УДАЛИТЬ. Такие команды, как КОПИРОВАТЬ, ВЫРЕЗАТЬ, ВСТАВИТЬ будут удалены из контекстного меню КОРЗИНЫ (если они там присутствуют). В результате применения приведенного inf-файла значение параметра ATTRIBUTES DWORD-типа станет равным 0х????0070. Заметьте, что сначала желательно сбрасывать биты отдельного байта, а потом уже устанавливать другие биты этого байта. Если в ветви реестра HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\SHELLFOLDER присутствует параметр DWORD-типа CALLFORATTRIBUTES, тогда ему будет присвоено значение 0 (если в ветви данного параметра не существует, тогда параметр создан не будет). Листинг 4.4. Пример модификации отдельных битов параметра. [version] Signature="$CHICAGO$" [DefaultInstall] BitReg=RecicleBit AddReg=CallAttrOff [CallAttrOff] HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder",CallForAttributes,0x00010021,0 [RecicleBit] HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder",Attributes,0,0xff,0 HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder",Attributes,0,0xff,1 HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder",Attributes,1,0x70,0 Создание службы Еще одной оригинальной возможностью, которой обладают inf-файлы, является упрощенное создание служб на компьютере. Для этого применяется не только ключевое слово ADDSERVICE, но и специальный стандартный блок inf-файла [DEFAULTINSTALL.SERVICES] (то есть, к блоку по умолчанию добавляется строка .SERVICES). при этом следует сказать, что этот блок не заменяет стандартный, а дополняет его. То есть, если в inf-файле будет два блока, тогда сначала выполняться ключевые слова блока [DEFAULTINSTALL], а потом блока [DEFAULTINSTALL.SERVICES]. Так как мы с вами уже знаем, как хранятся сведения о службе в реестре, для нас будет не сложно понять пример создания службы. Поэтому давайте сначала посмотрим на листинг 4.5. Этот листинг содержит в себе часть inf-файла, регистрирующего в системе службу ВОССТАНОВЛЕНИЕ СИСТЕМЫ. Листинг 4.5. Пример регистрации службы Восстановление системы [version] Signature="$CHICAGO$" [DefaultInstall.Services] AddService=sr,,SRFlt_service,SRFlt_event [SRFlt_service] DisplayName = "Имя службы" ServiceType = 2 StartType = 0 ErrorControl = 1 ServiceBinary = %12%\sr.sys LoadOrderGroup = "FSFilter System Recovery" [SRFlt_event] AddReg=SRFlt_event_addreg DelReg=SRFlt_event_delreg Ключевое слово ADDSERVICE, отличие от большинства других ключевых слов, содержит в себе не только название блока inf-файла, описывающего службу, но и некоторые другие сведения. Формат этого ключевого слова следующий: «название службы»,«тип службы», «блок inf-файла» Название службы Определяет название подраздела в ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES, в который будет заноситься информация о службе. Как мы знаем, название этого подраздела является и названием службы. Тип службы Определяет, является ли данная служба самостоятельной. Может принимать значения 0x01, 0x2 и 0x3. Блок inf-файла Определяет один или несколько блоков inf-файла (в этом случае они пишутся через запятую), в которых определены сведения о службе. На примере листинга первый блок содержит информацию о службе, а второй блок регистрирует возможность записи в системные журналы Windows (оснастка ПРОСМОТР СОБЫТИЙ). А теперь давайте рассмотрим блок inf-файла для регистрации службы. Он может включать в себя следующие ключевые слова.
Удаление службы Для удаления службы предназначено ключевое слово DELSERVICE, которое также указывается в блоке, названным в формате [«БЛОК УДАЛЕНИЯ».SERVICES]. Удаление службы выполняется намного проще — просто указывается имя службы, которую нужно удалить (название подраздела реестра, в котором служба описана). Листинг 4.6. Пример удаления службы [version] Signature="$CHICAGO$" [Uninstall.Services] DelService=sr В листинге ключевое слово DELSERVICE указано в блоке [UNINSTALL.SERVICES], так как именно блок [UNINSTALL] используется в примере при вызове inf-файла для удаления службы с помощью команды rundll32. Продолжение следует Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=167
|
В избранное | ||