virt-win-reg(1) | Virtualization Support | virt-win-reg(1) |
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).
Якщо вказати блокові пристрої гостьових систем безпосередньо, libvirt не буде використовуватися взагалі.
Якщо вказаний диск походить з libvirt, ця програма надішле запит щодо даних до libvirt. У цьому випадку вказане значення параметра формату буде проігноровано.
Якщо ви працюєте із образами дисків гостьових систем у форматі raw із ненадійних джерел, вам слід завжди вказувати назву формату.
Зауважте, що --merge не безпечно використовувати для активних віртуальних машин. Використання цього параметра команди для активних віртуальних машин призводить до пошкодження вмісту диска. Втім, експортування (виконання команди без цього параметра) є завжди безпечним.
Типово буде використано кодування UTF-16LE, яке має працювати у свіжих версіях Windows.
Така дія не є безпечною і не надає можливості зберегти точність запису початкових рядків реєстру з різних причин:
Усе це є наслідком того, що сам реєстр не містить даних щодо кодування рядків у ньому (див. "ENCODING STRINGS" in Win::Hivex::Regedit(3)).
Цим параметром слід користуватися лише для найпростіших рішень та діагностування вмісту реєстру. Ніколи не користуйтеся ним, якщо виведені дані має бути передано іншій програмі або збережено у іншому реєстрі.
У поточній версії цієї програми передбачено підтримку гостьових систем, які походять від Windows NT, починаючи з Windows XP і до, принаймні, Windows 8.
Передбачено підтримку таких ключів реєстру:
Ви можете використовувати "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
Нотатки:
Оновіть регістр:
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:
2022-05-26 | guestfs-tools-1.48.2 |