В рамках проекта [[https://github.com/strubin/hivexfs HIVEXFS]] подготовлен FUSE-модуль для монтирования реестра Windows к любому каталогу и дальнейшей работы с реестром как с древовидной ФС. На данный момент HIVEXFS уже используется в [[http://www.freedrweb.com/livecd Dr.Web LiveCD]], на котором найденные реестры монтируются посредством autofs в каталог /reg.Каталоги соответствуют разделам реестра, файлы - параметрам,
содержимое файла - значению соответствующего параметра.
Параметр по умолчанию обозначается файлом "@",
тип параметра определяется через [[http://linux.die.net/man/5/attr расширенные атрибуты файла]]. Значения параметров, имеющие типы REG_SZ, REG_EXPAND_SZ, REG_LINK REG_DWORD или REG_QWORD, автоматически конвертируется в текст (UTF-8) и обратно.
Для монтирования реестра используется утилита hivexfs.
В качестве первого аргумента указывается точка
монтирования windows-диска, второй аргумент - пустой каталог:
sudo hivexfs /mnt/windows /mnt/registry
++ Примеры использования:
Создадим параметр NEW_VALUE типа REG_SZ:
echo qwerty > NEW_VALUE
Посмотрим реальное содержимое:
attr -qg value NEW_VALUE |hexdump -C
00000000 71 00 77 00 65 00 72 00 74 00 79 00 0a 00 00 00 |q.w.e.r.t.y.....|
Как видим это строка в кодировке UTF-16LE, в конце завершается двумя нулями.
Преобразуем в тип REG_DWORD:
# attr -s type -V reg_dword NEW_VALUE
attr_set: Недопустимый аргумент
Could not set "type" for NEW_VALUE
Выдана ошибка, так как строка в число не переводится, попробуем снова:
# echo 12345 > NEW_VALUE
Attribute "type" set to a 9 byte value for NEW_VALUE : reg_dword
# attr -g type NEW_VALUE
Attribute "type" had a 9 byte value for NEW_VALUE : REG_DWORD
# attr -g size NEW_VALUE
Attribute "size" had a 1 byte value for NEW_VALUE : 4
# cat NEW_VALUE
12345
++ Поддерживаемые операции:
Посмотреть доступный список типов параметра
attr -l [value]
Посмотреть тип параметра можно командой:
getfattr -n user.type [value]
или
attr -g type [value]
Реальный размер параметра:
getfattr -n user.size [value]
или
attr -g size [value]
Реальное побайтное содержимое параметра:
getfattr --only-values -n user.value [value]
или
attr -qg value [value]
копировать лучше командой ln (link), тогда копируются все атрибуты параметра. Команда cp использует вызовы read и write, которые строковые и числовые ключи перекодируют на лету, в UTF-8 и обратно. Так что cp - это весьма накладно + он ни чего не знает о типе параметра. Рекурсивно скопировать раздел можно командой cp -Rl [path1] [path2]
По умолчанию создается тип REG_SZ, если параметр модифицируется, то его тип не меняется. Сменить тип параметра можно командой:
setfattr -n user.type -v [new_type] [value]
или
attr -s type -V [new_type] [value]
Модификация типа возможна для параметров: REG_SZ, REG_EXPAND_SZ, REG_LINK, REG_BINARY, REG_DWORD, REG_QWORD. В случае невозможности модификации типа возвращается ошибка.
Если что-то сделали не так, то отменить изменения можно убив процесс hivexfs, тогда демонтирования не будет и изменения в силу не вступят.
Есть ограничение: не возможно создать раздел или параметр с именем содержащим национальныхе символы.
URL: https://github.com/strubin/hivexfs
Обсуждается: http://www.opennet.dev/tips/info/2735.shtml