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

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

Это довольно интересная и, можно сказать, уникальная возможность, с помощью которой можно изменить отдельный бит параметра, не изменяя другие его биты. Для реализации этой возможности применяется ключевое слово 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