virt-win-reg —
програма
для
експортування
та
дописування
записів
реєстру Windows з
гостьової
системи Windows
virt-win-reg назва_домену 'HKLM\Шлях\до\підключа'
virt-win-reg назва_домену 'HKLM\Шлях\до\підключа' назва
virt-win-reg назва_домену 'HKLM\Шлях\до\підключа' @
virt-win-reg --merge назва_домену [вхідний.reg ...]
virt-win-reg [--параметри] диск.img ... # замість назва_домену
Не
використовуйте
"virt-win-reg" з
параметром
--merge для
активних
віртуальних
машин. Якщо
ви зробите
це, ви
невиправно
ушкодите
диск у
віртуальній
машині. "virt-win-reg"
намагатиметься
запобігти
подібним
діям, але
програма
не завжди
може
визначити
усі
можливі
випадки.
Внесення
змін до
реєстру Windows є
ризикованою
дією.
Формат
реєстру
доволі
неясний і
недокументований,
а зміни у
реєстрі
можуть
призвести
до
неможливості
завантажити
систему.
Тому, якщо
ви
користуєтеся
параметром
--merge, не
забувайте
спочатку
створити
надійну
резервну
копію.
Ця
програма
може
експортувати
і
дописувати
записи
реєстру Windows з
гостьової
системи Windows.
Першим
параметром
є назва
гостьової
системи libvirt
або
простого (raw)
образу
гостьової
системи Windows.
Якщо
не
вказано
параметр
--merge,
вибраний
ключ
реєстру
буде
показано
або
експортовано
(рекурсивно).
Приклад:
$ virt-win-reg Windows7 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft'
Крім того,
ви можете
переглядати
окремі
значення у
ключах
реєстру.
Приклад:
$ cvkey='HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
$ virt-win-reg Windows7 $cvkey ProductName
Windows 7 Enterprise
За
допомогою
--merge ви
можете
дописати
текстовий
файл regedit до
реєстру Windows:
$ virt-win-reg --merge Windows7 changes.reg
Цю
програму
призначено
лише для
спрощення
доступу до
реєстру.
Якщо вам
потрібні
якісь
складні
дії з
реєстром,
рекомендуємо
вам
отримати
файли роїв
реєстру з
гостьової
системи за
допомогою
libguestfs(3) або
guestfish(1) і
обробити
їх
локально,
наприклад
за
допомогою
hivex(3),
hivexsh(1) або
hivexregedit(1).
- --help
- Показати
коротку
довідку.
- --version
- Показати
дані щодо
версії і
завершити
роботу.
- --debug
- Увімкнути
показ
діагностичних
повідомлень.
- -c
адреса
- --connect
адреса
- Якщо
використовується
libvirt,
встановити
з’єднання
з вказаним
URI. Якщо
пропущено,
з’єднання
буде
встановлено
з типовим
гіпервізором
libvirt.
Якщо
вказати
блокові
пристрої
гостьових
систем
безпосередньо,
libvirt не буде
використовуватися
взагалі.
-
--format raw
- Визначає
формат
образу
диска,
назву
якого
вказано у
рядку
команди.
Якщо
формат не
вказано,
його буде
визначено
автоматично
на основі
вмісту
образу
диска.
Якщо
вказаний
диск
походить з
libvirt, ця
програма
надішле
запит щодо
даних до libvirt.
У цьому
випадку
вказане
значення
параметра
формату
буде
проігноровано.
Якщо ви
працюєте
із
образами
дисків
гостьових
систем у
форматі raw
із
ненадійних
джерел, вам
слід
завжди
вказувати
назву
формату.
- --merge
- У режимі
об'єднання
програма
дописує
текстовий
файл regedit до
реєстру Windows
віртуальної
машини.
Якщо цей
параметр
не
вказано, virt-win-reg
показує
або
експортує
записи
реєстру.
Зауважте,
що --merge не
безпечно
використовувати
для
активних
віртуальних
машин.
Використання
цього
параметра
команди
для
активних
віртуальних
машин
призводить
до
пошкодження
вмісту
диска.
Втім,
експортування
(виконання
команди
без цього
параметра)
є завжди
безпечним.
-
--encoding UTF-16LE|ASCII
- При
об'єднанні
(і лише при
ньому) у
вас може
виникнути
потреба у
визначення
кодування
рядків, які
використовуються
у файлі
рою.
Докладніший
опис можна
знайти у
розділі "ENCODING
STRINGS" in Win::Hivex::Regedit(3).
Типово
буде
використано
кодування
UTF-16LE, яке має
працювати
у свіжих
версіях Windows.
- --unsafe-printable-strings
- Під час
експортування
(і лише під
час нього)
припускати,
що рядки
записано у
кодуванні
UTF-16LE і
виводити
їх у
форматі
текстових
рядків, а
не
послідовностей
шістнадцяткових
чисел.
Вилучити
завершальний
нуль-символ
з рядків,
якщо такий
буде
виявлено.
Така дія не
є
безпечною
і не надає
можливості
зберегти
точність
запису
початкових
рядків
реєстру з
різних
причин:
- •
- Припускається,
що
початковим
кодуванням
є UTF-16LE. Рядки ASCII і
рядки у
інших
кодуваннях
буде
пошкоджено
під час
цього
перетворення.
- •
- Припускається,
що усі
дані, які
належать
до типу 1 чи
типу 2, є
насправді
рядками і
що усі інші
дані не є
рядками,
але
визначений
тип поля у
реєстрах,
зазвичай,
не є
надійним
джерелом
даних.
- •
- Втрачаються
дані щодо
того, чи
завершувався
рядок у
реєстрі
нуль-символом.
Усе це є
наслідком
того, що сам
реєстр не
містить
даних щодо
кодування
рядків у
ньому (див.
"ENCODING STRINGS" in
Win::Hivex::Regedit(3)).
Цим
параметром
слід
користуватися
лише для
найпростіших
рішень та
діагностування
вмісту
реєстру.
Ніколи не
користуйтеся
ним, якщо
виведені
дані має
бути
передано
іншій
програмі
або
збережено
у іншому
реєстрі.
У поточній
версії
цієї
програми
передбачено
підтримку
гостьових
систем, які
походять
від Windows NT,
починаючи
з Windows XP і до,
принаймні,
Windows 8.
Передбачено
підтримку
таких
ключів
реєстру:
- "HKEY_LOCAL_MACHINE\SAM"
- "HKEY_LOCAL_MACHINE\SECURITY"
- "HKEY_LOCAL_MACHINE\SOFTWARE"
- "HKEY_LOCAL_MACHINE\SYSTEM"
- "HKEY_USERS\.DEFAULT"
- "HKEY_USERS\SID"
- де SID — SID
користувача
Windows
(наприклад
"S-1-5-18").
- "HKEY_USERS\користувач"
- де
користувач
— назва
облікового
запису
локального
користувача
(це
розширення
libguestfs).
Ви можете
використовувати
"HKLM" як
скорочення
від "HKEY_LOCAL_MACHINE", та
"HKU" як
скорочення
від "HKEY_USERS".
Підтримки
буквальних
ключів "HKEY_USERS\$SID"
і "HKEY_CURRENT_USER" не
передбачено
(немає
«поточного
користувача»).
«Швидкий
запуск» Windows 8
може
заважати virt-win-reg
редагувати
реєстр. Див.
"ПРИСИПЛЯННЯ
WINDOWS ТА
ШВИДКИЙ
ЗАПУСК WINDOWS 8" in
guestfs(3).
"virt-win-reg" вважає,
що вміст
файлів regedit
вже
перекодовано
до
локального
кодування.
Зазвичай, у
основних
системах Linux
це означає,
що
використано
UTF-8 із
символами
завершення
рядків у
стилі Unix.
Оскільки
файли regedit Windows
часто
записуються
у
кодуванні
UTF-16LE із
символами
завершення
рядків у
стилі Windows,
ймовірно,
вам
доведеться
виконати
перекодування
усього
файла до
або після
обробки.
Для
перекодування
файла з
формату Windows
до формату
Linux (до
обробки
його за
допомогою
команди з
параметром
--merge) вам слід
зробити
щось таке:
iconv -f utf-16le -t utf-8 < win.reg | dos2unix > linux.reg
Щоб
виконати
зворотне
перетворення
після
експортування
і перед
надсиланням
файла
користувачеві
Windows, слід
зробити
щось таке:
unix2dos linux.reg | iconv -f utf-8 -t utf-16le > win.reg
Щоб
дізнатися
більше про
кодування,
ознайомтеся
зі
сторінкою
підручника
щодо
Win::Hivex::Regedit(3).
Якщо ви не
певні щодо
поточного
кодування,
скористайтеся
командою
file(1). У свіжих
версіях Windows regedit.exe
створює
файли
кодування
UTF-16LE із
символами
завершення
рядків у
стилі Windows (CRLF),
ось такі:
$ file software.reg
software.reg: Little-endian UTF-16 Unicode text, with very long lines,
with CRLF line terminators
Цей файл
потребуватиме
перетворення,
перш ніж ви
зможете
скористатися
для нього
параметром
--merge.
Ключі
реєстру,
подібні до
"CurrentControlSet",
насправді
не існують
у реєстрі Windows
на рівні
файла рою, і
тому ви не
зможете
вносити до
них зміни.
Насправді,
"CurrentControlSet" є
альтернативною
назвою "ControlSet001".
За певних
обставин
це може
бути
посиланням
на інший
керівний
набір.
Визначити
набір
можна за
допомогою
ключа "HKLM\SYSTEM\Select":
# virt-win-reg WindowsGuest 'HKLM\SYSTEM\Select'
[HKEY_LOCAL_MACHINE\SYSTEM\Select]
"Current"=dword:00000001
"Default"=dword:00000001
"Failed"=dword:00000000
"LastKnownGood"=dword:00000002
«Поточним»
є той набір,
який Windows
вибере під
час
завантаження.
Аналогічно,
інші ключі
"Current..." у шляху
можуть
потребувати
заміни.
Для
вилучення
усього
ключа
реєстру
скористайтеся
такою
синтаксичною
конструкцією:
[-HKEY_LOCAL_MACHINE\Foo]
Для
вилучення
окремого
значення у
ключі
скористайтеся
такою
синтаксичною
конструкцією:
[HKEY_LOCAL_MACHINE\Foo]
"Value"=-
Зауважте,
що у
результаті
деяких із
команд у
підказках
буде
змінено
образ
диска
гостьової
системи.
Гостьову
систему
має бути
вимкнено,
щоб
запобігти
пошкодженню
даних на
диску.
Приготуйте
пакетний
скрипт DOS (.bat),
скрипт VBScript
або
виконуваний
файл.
Вивантажте
його до
гостьової
системи за
допомогою
guestfish(1). У цьому
прикладі
скрипт
називається
"test.bat" і його
вивантажено
до "C:\":
guestfish -i -d WindowsGuest upload test.bat /test.bat
Приготуйте
файл regedit, який
міститиме
зміни до
реєстру:
cat > test.reg <<'EOF'
[HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce]
"Test"="c:\\test.bat"
EOF
У цьому
прикладі
ми
використовуємо
ключ "RunOnce",
який
означає, що
скрипт
буде
запущено
лише один
раз під час
першого
входу
користувача
до системи.
Якщо вам
потрібно,
щоб скрипт
запускався
кожного
разу, коли
користувач
входить до
системи,
замініть
"RunOnce" на "Run".
Оновіть
регістр:
virt-win-reg --merge WindowsGuest test.reg
У цьому
розділі ми
припускаємо,
що ви
обізнані
із роботою
служб Windows і
маєте
програму,
яка
обробляє
протокол
керування
службами Windows
безпосередньо
або хочете
запустити
будь-яку
програму
за
допомогою
обгортки
служби,
наприклад
SrvAny або
безкоштовної
RHSrvAny.
Спочатку
вивантажте
програму і,
якщо
потрібно,
обгортку
служби. У
нашому
прикладі
тестова
програма
має назву
"test.exe" і
використано
обгортку RHSrvAny:
guestfish -i -d WindowsGuest <<EOF
upload rhsrvany.exe /rhsrvany.exe
upload test.exe /test.exe
EOF
Приготуйте
файл regedit зі
змінами до
реєстру. У
нашому
прикладі
перша
зміна до
реєстру
потрібна
для самої
служби або
обгортки
служби
(якщо така
використовується).
Друга
зміна
потрібна
лише через
те, що ми
використовуємо
обгортку
служби RHSrvAny.
cat > service.reg <<'EOF'
[HKLM\SYSTEM\ControlSet001\services\RHSrvAny]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"="c:\\rhsrvany.exe"
"DisplayName"="RHSrvAny"
"ObjectName"="NetworkService"
[HKLM\SYSTEM\ControlSet001\services\RHSrvAny\Parameters]
"CommandLine"="c:\\test.exe"
"PWD"="c:\\Temp"
EOF
Нотатки:
- •
- Щодо
використання
"ControlSet001" див.
розділ
вище на цій
сторінці
підручника.
Ймовірно,
вам слід
скоригувати
цей запис
відповідно
до
керівного
набору,
який
використовується
вашою
гостьовою
системою.
- •
- "ObjectName"
керує
правами
доступу,
які матиме
служба.
Альтернативою
є "ObjectName"="LocalSystem",
яка надає
права
доступу
найпривілейованішого
облікового
запису.
- •
- Щодо
значення
«магічних
чисел»
ознайомтеся
із цією
статтею
бази даних
знань Microsoft:
http://support.microsoft.com/kb/103000.
Оновіть
регістр:
virt-win-reg --merge WindowsGuest service.reg
Будьте
обережні
із
передаванням
параметрів,
які
містять
символ "\"
(зворотну
похилу
риску), до
командної
оболонки.
Зазвичай,
вам слід
використати
одинарні
лапки або
подвійні
зворотні
похилі
риски (але
не те і інше
одразу) для
захисту
від
обробки
інтерпретатором
командної
оболонки.
Регістр
символів
шляхів і
назв
значень
береться
до уваги
під час
обробки.
hivex(3),
hivexsh(1),
hivexregedit(1),
guestfs(3),
guestfish(1),
virt-cat(1),
virt-tail(1),
Sys::Guestfs(3),
Win::Hivex(3),
Win::Hivex::Regedit(3),
Sys::Virt(3),
http://libguestfs.org/.
Richard W.M. Jones
http://people.redhat.com/~rjones/
©Red Hat Inc., 2010
To get a list of bugs against libguestfs, use this link:
https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
To report a new bug against libguestfs, use this link:
https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
When reporting a bug, please supply:
- •
- The version of libguestfs.
- •
- Where you got libguestfs (eg. which Linux distro, compiled
from source, etc)
- •
- Describe the bug accurately and give a way to reproduce
it.
- •
- Run libguestfs-test-tool(1) and paste the
complete, unedited output into the bug report.