Монтирование 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
2013.02.03 22:46:42
#cid54507

Ответить

альтернатива chntpw

2013.02.04 20:09:40
#cid54580

Ответить

#cid54507, sasha

альтернатива chntpw

chntpw не понимает даже XP и 2003, пробовал.
Плюс, здесь происходит монтирование непосредственно в файловую систему, что невероятно круто.

imen
2013.02.07 09:56:06
#cid54772

Ответить

#cid54580,

Плюс, здесь происходит монтирование непосредственно в файловую систему, что невероятно круто.

Угу.
Особенно круто то, что монтирование, в лучших традициях современной геополитики - со стандартным набором граблей в части поддержки многострадального русского языка (норот в этой стране неправильный, язык у него кривой и слишком сложный, потому пусть "добровольно" учат язык "господ", и не смеют задумываться о самоназначенном статусе оных).
http://zagrei.livejournal.com/34784.html

2013.02.07 16:38:14
#cid54796

Ответить

#cid54772, imen

Угу.
Особенно круто то, что монтирование, в лучших традициях современной геополитики - со стандартным набором граблей в части поддержки многострадального русского языка (норот в этой стране неправильный, язык у него кривой и слишком сложный, потому пусть "добровольно" учат язык "господ", и не смеют задумываться о самоназначенном статусе оных).

Не думаю, что проблема с кодировками имеет какой-то подспудный характер.

Например, количество китайцев таково, что позволяет им претендовать на "родной" язык программирования. Т.е. язык с командами на китайском. Но по факту латиница оказывается удобнее.

А проблема с языками в различных приложениях потихоньку исправляется. И здесь поправят. Не всё ж сразу.