| virt-win-reg(1) | Virtualization Support | virt-win-reg(1) |
نام (NAME)
virt-win-reg - استخراج و ادغام مدخلهای رجیستری ویندوز در یک ماشین مجازی مهمان
خلاصه دستور (SYNOPSIS)
virt-win-reg domname 'HKLM\Path\To\Subkey' virt-win-reg domname 'HKLM\Path\To\Subkey' name virt-win-reg domname 'HKLM\Path\To\Subkey' @ virt-win-reg --merge domname [input.reg ...] virt-win-reg [--options] disk.img ... # به جای domname
هشدار (WARNING)
شما نباید از "virt-win-reg" همراه با گزینه --merge روی ماشینهای مجازی فعال و در حال اجرا (live) استفاده کنید. در صورت انجام این کار، دیسک ماشین مجازی به صورت غیرقابل برگشت آسیب خواهد دید و تخریب میشود. برنامه "virt-win-reg" تلاش میکند مانع از انجام این کار شود، اما همه حالتها را پوشش نمیدهد.
ویرایش رجیستری ویندوز ماهیتاً عملیاتی پرخطر است. قالب آن عمداً مبهم و مستندسازینشده است و اعمال تغییرات نادرست در رجیستری میتواند سیستم را غیرقابل بوت کند. بنابراین، هنگام استفاده از گزینه --merge، ابتدا مطمئن شوید که یک نسخه پشتیبان مطمئن تهیه کردهاید.
توضیحات (DESCRIPTION)
این برنامه میتواند مدخلهای رجیستری ویندوز را از یک ماشین مجازی مهمان ویندوز استخراج کرده یا در آن ادغام کند.
اولین پارامتر، نام مهمان در libvirt یا ایمیج خام دیسک ماشین مجازی ویندوز است.
اگر گزینه --merge مشخص not نشود، کلید رجیستری انتخابشده (به صورت بازگشتی) نمایش داده/استخراج میشود. برای مثال:
$ 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 را در رجیستری ویندوز ادغام کنید:
$ virt-win-reg --merge Windows7 changes.reg
نکته (NOTE)
این برنامه فقط برای دسترسیهای ساده به رجیستری طراحی شده است. اگر میخواهید عملیات پیچیدهای روی رجیستری انجام دهید، پیشنهاد میکنیم فایلهای کندوی رجیستری (hive files) را با استفاده از libguestfs(3) یا guestfish(1) از ماشین مهمان دریافت کرده و به صورت محلی، مثلاً با استفاده از hivex(3)، hivexsh(1) یا hivexregedit(1) به آنها دسترسی پیدا کنید.
گزینهها (OPTIONS)
- --help
- نمایش راهنمای خلاصه.
- --version
- نمایش شماره نسخه و خروج.
- --debug
- فعالسازی پیامهای اشکالزدایی.
- -c URI
- --connect URI
- در صورت
استفاده از
libvirt، به URI
دادهشده
متصل
میشود. اگر
مشخص نشود،
به
هایپروایزر
پیشفرض libvirt
متصل خواهد
شد.
اگر دستگاههای بلوکی مهمان را مستقیماً مشخص کنید، به هیچ وجه از libvirt استفاده نمیشود.
- --format raw
- قالب
ایمیجهای
دیسک
ارائهشده
در خط فرمان
را تعیین
میکند. اگر
مشخص نشود،
قالب به طور
خودکار از
محتوای
ایمیج دیسک
تشخیص داده
میشود.
اگر ایمیجهای دیسک از libvirt درخواست شوند، برنامه این اطلاعات را از libvirt استعلام میکند. در این حالت مقدار پارامتر format نادیده گرفته میشود.
هنگام کار با ایمیجهای دیسک خام مهمان که غیرقابلاعتماد هستند، همیشه باید قالب دیسک را صراحتاً تعیین کنید.
- --merge
- در حالت
ادغام، این
گزینه یک
فایل متنی regedit
را در
رجیستری
ویندوزِ
ماشین
مجازی
ادغام
میکند. اگر
این پرچم
داده نشود،
"virt-win-reg" در
عوض
مدخلهای
رجیستری را
نمایش داده
یا استخراج
میکند.
توجه داشته باشید که استفاده از --merge روی ماشینهای مجازی فعال و روشن ناامن است و منجر به خرابی دیسک میشود؛ اما استخراج اطلاعات (بدون این پرچم) همیشه ایمن است.
- --encoding UTF-16LE|ASCII
- هنگام
ادغام
(فقط)، ممکن
است لازم
باشد
کدگذاری
رشتههای
مورد
استفاده در
فایل کندو (hive)
را تعیین
کنید. این
موضوع به
تفصیل در
بخش "ENCODING STRINGS" از
Win::Hivex::Regedit(3) توضیح
داده شده
است.
حالت پیشفرض استفاده از UTF-16LE است که باید با نسخههای جدید ویندوز کار کند.
- --unsafe-printable-strings
- هنگام
استخراج
(فقط)، فرض
میکند که
رشتهها
دارای
کدگذاری UTF-16LE
هستند و
آنها را به
جای
توالیهای
هگزادسیمال
به صورت
رشته متنی
چاپ میکند.
همچنین در
صورت وجود،
نویسه صفر
پایانی را
از انتهای
رشته حذف
میکند.
این کار ناامن است و به دلایل مختلف صحت و امانت رشتهها را در رجیستری اصلی حفظ نمیکند:
- فرض میکند کدگذاری اصلی UTF-16LE است. رشتههای ASCII و رشتهها با سایر کدگذاریها در اثر این تبدیل خراب میشوند.
- فرض میکند هر دادهای با نوع ۱ یا ۲ واقعاً رشته است و سایر دادهها رشته نیستند؛ اما فیلد نوع داده در رجیستریهای واقعی همیشه قابلاعتماد نیست.
- اطلاعات مربوط به اینکه آیا یک نویسه صفر در انتهای رشته در رجیستری وجود داشته یا خیر را از بین میبرد.
همه این موارد به این دلیل رخ میدهد که خود رجیستری اطلاعاتی درباره نحوه کدگذاری رشتهها در بر ندارد (بخش "ENCODING STRINGS" در Win::Hivex::Regedit(3) را ببینید).
تنها برای بررسی سریع و اشکالزدایی محتوای رجیستری باید از این گزینه استفاده کنید، و هرگز نباید زمانی که قرار است خروجی به برنامه دیگری فرستاده شود یا در رجیستری دیگری ذخیره گردد از آن استفاده نمایید.
سیستمهای پشتیبانیشده (SUPPORTED SYSTEMS)
این برنامه در حال حاضر از مهمانهای مبتنی بر Windows NT از ویندوز XP تا حداقل ویندوز ۸ پشتیبانی میکند.
کلیدهای رجیستری زیر پشتیبانی میشوند:
- "HKEY_LOCAL_MACHINE\SAM"
- "HKEY_LOCAL_MACHINE\SECURITY"
- "HKEY_LOCAL_MACHINE\SOFTWARE"
- "HKEY_LOCAL_MACHINE\SYSTEM"
- "HKEY_USERS\.DEFAULT"
- "HKEY_USERS\SID"
- که در آن SID شناسه امنیتی کاربر ویندوز (مانند "S-1-5-18") است.
- "HKEY_USERS\username"
- که در آن username نام کاربر محلی است (این یک افزونه اختصاصی libguestfs است).
میتوانید از "HKLM" به عنوان مخفف "HKEY_LOCAL_MACHINE" و از "HKU" به عنوان مخفف "HKEY_USERS" استفاده کنید.
کلیدهای لفظی "HKEY_USERS\$SID" و "HKEY_CURRENT_USER" پشتیبانی نمیشوند (هیچ «کاربر فعلی» وجود ندارد).
ویندوز ۸ (WINDOWS 8)
قابلیت "fast startup" ویندوز ۸ میتواند مانع از توانایی virt-win-reg در ویرایش رجیستری شود. بخش "WINDOWS HIBERNATION AND WINDOWS 8 FAST STARTUP" در guestfs(3) را ببینید.
کدگذاری (ENCODING)
برنامه "virt-win-reg" انتظار دارد که فایلهای regedit از قبل با کدگذاری محلی بازکدگذاری شده باشند. معمولاً در سیستمهای لینوکس میزبان، این به معنی UTF-8 با پایان خطوط سبک یونیکس است. از آنجا که فایلهای regedit ویندوز غالباً در قالب UTF-16LE با پایان خطوط ویندوزی هستند، ممکن است نیاز باشد کل فایل را قبل یا بعد از پردازش بازکدگذاری کنید.
برای تبدیل مجدد کدگذاری یک فایل از قالب ویندوز به لینوکس (پیش از پردازش با گزینه --merge)، میتوانید دستوری شبیه به این را اجرا کنید:
iconv -f utf-16le -t utf-8 < win.reg | dos2unix > linux.reg
برای انجام عکس این عمل، پس از استخراج و قبل از ارسال فایل برای یک کاربر ویندوز، دستوری مانند زیر اجرا کنید:
unix2dos linux.reg | iconv -f utf-8 -t utf-16le > win.reg
برای اطلاعات بیشتر درباره کدگذاری، Win::Hivex::Regedit(3) را ببینید.
اگر درباره کدگذاری فعلی مطمئن نیستید، از دستور file(1) استفاده کنید. نسخههای اخیر برنامه regedit.exe ویندوز یک فایل UTF-16LE با پایان خطوط ویندوزی (CRLF) تولید میکنند، مانند:
$ file software.reg software.reg: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators
این فایل قبل از آنکه بتوانید آن را با --merge ادغام کنید، نیازمند تبدیل خواهد بود.
CurrentControlSet و موارد مشابه
کلیدهای رجیستری مانند "CurrentControlSet" در سطح فایل کندو (hive) واقعاً در رجیستری ویندوز وجود ندارند و بنابراین نمیتوانید مستقیماً آنها را تغییر دهید.
مقدار "CurrentControlSet" معمولاً نام مستعاری (alias) برای "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
مقدار "Current" همان مجموعهای است که ویندوز هنگام بوت انتخاب خواهد کرد.
به طور مشابه، سایر کلیدهای "Current..." در مسیر نیز ممکن است نیاز به جایگزینی داشته باشند.
حذف کلیدها و مقادیر رجیستری (DELETING REGISTRY KEYS AND VALUES)
برای حذف یک کلید کامل رجیستری، از نحو زیر استفاده کنید:
[-HKEY_LOCAL_MACHINE\Foo]
برای حذف یک مقدار مشخص در درون یک کلید، از نحو زیر استفاده کنید:
[HKEY_LOCAL_MACHINE\Foo] "Value"=-
نکات ویندوز (WINDOWS TIPS)
توجه داشته باشید که برخی از این نکات، ایمیج دیسک مهمان را تغییر میدهند. ماشین مهمان باید خاموش باشد، در غیر این صورت با خرابی دیسک مواجه خواهید شد.
اجرای یک اسکریپت دستهای هنگام ورود کاربر
یک اسکریپت دستهای 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
نصب یک سرویس
این بخش فرض میکند که با سرویسهای ویندوز آشنایی دارید و یا برنامهای دارید که پروتکل Service Control ویندوز را مستقیماً مدیریت میکند، یا میخواهید هر برنامهای را با استفاده از یک پوستهساز سرویس مانند 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" است که بالاترین سطح دسترسی را خواهد داشت.
- برای آگاهی از مفهوم اعداد جادویی، این مقاله پایگاه دانش مایکروسافت را ببینید: http://support.microsoft.com/kb/103000
رجیستری را بهروزرسانی کنید:
virt-win-reg --merge WindowsGuest service.reg
نقلقول در شل (SHELL QUOTING)
هنگام ارسال پارامترهای حاوی "\" (بکاسلش) در شل دقت کنید. معمولاً باید از 'نقلقول تکی' یا بکاسلش دوگانه (نه هر دو همزمان) برای محافظت از آنها در برابر شل استفاده کنید.
مسیرها و نام مقادیر به بزرگی و کوچکی حروف حساس نیستند (case-insensitive).
همچنین ببینید (SEE ALSO)
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
نویسنده (AUTHOR)
Richard W.M. Jones http://people.redhat.com/~rjones
حق نشر (COPYRIGHT)
Copyright (C) 2010 Red Hat Inc.
مجوز (LICENSE)
این برنامه یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU GPL) منتشرشده توسط بنیاد نرمافزارهای آزاد، ویرایش ۲ یا (به انتخاب خودتان) هر نسخه بالاتری بازتوزیع کرده یا تغییر دهید.
این برنامه به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابلیت تجاری یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید.
شما باید به همراه این برنامه یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ اگر دریافت نکردهاید، به بنیاد نرمافزارهای آزاد به آدرس زیر بنویسید: 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
گزارش اشکالات (BUGS)
برای دریافت فهرستی از اشکالات مربوط به libguestfs، از پیوند زیر استفاده کنید: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
برای گزارش یک اشکال جدید در libguestfs، از پیوند زیر استفاده کنید: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
هنگام گزارش اشکال، لطفاً موارد زیر را ارائه دهید:
- نسخه libguestfs.
- محل دریافت libguestfs (مثلاً کدام توزیع لینوکس، کامپایلشده از سورس و غیره).
- شرح دقیق اشکال و روشی برای بازتولید آن.
- دستور libguestfs-test-tool(1) را اجرا کرده و خروجی کامل و دستنخورده آن را در گزارش اشکال قرار دهید.
| 2026-07-11 | guestfs-tools-1.56.0 |