НАЗВА
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
«Швидкий
запуск» 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 тощо.
Ключі реєстру, подібні до "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"=-
ПІДКАЗКИ ЩОДО WINDOWS
Зауважте, що у результаті деяких із команд у підказках буде змінено образ диска гостьової системи. Гостьову систему має бути вимкнено, щоб запобігти пошкодженню даних на диску.
ЗАПУСК
ПАКЕТНОГО
СКРИПТУ
ПІД ЧАС
ВХОДУ
КОРИСТУВАЧА
ДО
СИСТЕМИ
Приготуйте
пакетний
скрипт 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
LICENSE
BUGS
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. |