KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программное обеспечение » Роман Клименко - Недокументированные и малоизвестные возможности Windows XP

Роман Клименко - Недокументированные и малоизвестные возможности Windows XP

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Роман Клименко, "Недокументированные и малоизвестные возможности Windows XP" бесплатно, без регистрации.
Перейти на страницу:

Рассмотрим пример удаления параметра. В этом примере из реестра удаляется ветвь HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverShares, чтобы отключить все пользовательские общедоступные папки. При этом сначала нужно удалить все расположенные в данной ветви разделы, чтобы можно было удалить саму ветвь реестра. Как правило, ветвь для хранения сведений об общедоступных папках содержит только один раздел — Security.

ПРИМЕЧАНИЕ

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

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

[version]

Signature="$CHICAGO$"


[DefaultInstall]

DelReg=shared_del


[shared_del]

HKLM,"SYSTEMCURRENTCONTROLSETSERVICESLANMANSERVERSHARESSecurity"

HKLM,"SYSTEMCURRENTCONTROLSETSERVICESLANMANSERVERSHARES"

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

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

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

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

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

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

 • 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_ROOTCLSID645FF040-5081-101B-9F08-00AA002F954E}ShellFolder присутствует параметр, имеющий DWORD-тип, CallForAttributes, то ему будет присвоено значение 0 (если в ветви данного параметра не существует, то он и не будет создан). 

Листинг 15.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].

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

Листинг 15.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_MACHINESYSTEMCurrentControlSetServices, в который будет заноситься информация о службе. Как известно, название этого раздела является и названием службы.

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*