Монтирование Windows-реестра в Linux
© Сергей Трубин
В рамках проекта HIVEXFS подготовлен FUSE-модуль для монтирования реестра Windows к любому каталогу и дальнейшей работы с реестром как с древовидной ФС. На данный момент HIVEXFS уже используется в Dr.Web LiveCD, на котором найденные реестры монтируются посредством autofs в каталог /reg.
Каталоги соответствуют разделам реестра, файлы — параметрам, содержимое файла — значению соответствующего параметра. Параметр по умолчанию обозначается файлом "@", тип параметра определяется через расширенные атрибуты файла. Значения параметров, имеющие типы 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, тогда демонтирования не будет и изменения в силу не вступят.
Есть ограничение: невозможно создать раздел или параметр с именем, содержащим национальные символы.
Комментарии
sasha
#cid54507
Ответить
альтернатива chntpw
#cid54580
Ответить
#cid54507, sasha
chntpw не понимает даже XP и 2003, пробовал.
Плюс, здесь происходит монтирование непосредственно в файловую систему, что невероятно круто.
imen
#cid54772
Ответить
#cid54580,
Угу.
Особенно круто то, что монтирование, в лучших традициях современной геополитики - со стандартным набором граблей в части поддержки многострадального русского языка (норот в этой стране неправильный, язык у него кривой и слишком сложный, потому пусть "добровольно" учат язык "господ", и не смеют задумываться о самоназначенном статусе оных).
http://zagrei.livejournal.com/34784.html
#cid54796
Ответить
#cid54772, imen
Не думаю, что проблема с кодировками имеет какой-то подспудный характер.
Например, количество китайцев таково, что позволяет им претендовать на "родной" язык программирования. Т.е. язык с командами на китайском. Но по факту латиница оказывается удобнее.
А проблема с языками в различных приложениях потихоньку исправляется. И здесь поправят. Не всё ж сразу.