محضرخانه ویندوز

محضرخانهٔ (ثبت احوال) ویندوز (به انگلیسی: Windows registry) که گاهی به‌طور خلاصه رجیستری نیز نامیده می‌شود، جایی است که تنظیمات نرم‌افزارها و سخت‌افزارها در سیستم‌عامل ویندوز در آن به ثبت می‌رسند. در پنجمین ویراست از کتاب «فرهنگ رایانه‌ای مایکروسافت» دربارهٔ رجیستری چنین آمده‌است:
یک پایگاه داده متمرکز با ساختارِ سلسله مراتبی که در ویندوزهای 9x ،CE ،NT و ۲۰۰۰ به کار رفته و از آن برای نگهداری اطلاعات لازم جهت پیکربندی سیستم برای یک یا چند کاربر، برنامه‌های کاربردی و تجهیزات سخت‌افزاری استفاده می‌شود. رجیستری، حاوی اطلاعاتی است که ویندوز در حین عمل، به‌طور پیوسته و مکرر به آن‌ها رجوع می‌کند؛ از قبیل [تنظیمات مربوط به] پرونده‌های هر کاربر، برنامه‌های کاربردی نصب شده بر روی رایانه، انواع مستنداتی که [هر کاربر] می‌تواند ایجاد کند، خصلت‌های صفحه‌ای پوشه‌ها، آیکون‌های برنامه‌ها، سخت‌افزارهای موجود در سیستم، درگاه‌های مورد استفاده و… رجیستری، جایگزینی است برای فایلهای مبتنی بر متن با پسوند INI در ویندوز 3.x و همچنین فایل‌های پیکربندی MS-DOS، مثل autoexec.bat و config.sys. در ضمن، داده‌های رجیستری در فایل‌های دودویی ذخیره می‌شوند.
رجیستری، یکی از مهم‌ترین و اصلی‌ترین بخش‌های سیستم‌عامل ویندوز است. این بخش، نقشی کلیدی در پیکربندی و کنترل سیستم‌عامل ویندوز ایفا کرده و همچون انباره‌ای است که تنظیمات کلیِ سیستم (اعم از نرم‌افزاری و سخت‌افزاری) و تنظیمات خاصِ هر کاربر را در خود جای می‌دهد. نقش این بخش در ویندوز چنان است که تغییر در آن، تأثیرات بنیادینی بر عملکرد کل این سیستم‌عامل خواهد داشت. به خاطر همین اهمیت و حساسیت، رجیستری از دید و دسترسی کاربران عادی به دور نگاه داشته می‌شود. اما کاربر خبره می‌تواند از طریق ابزارهای تعبیه شده در ویندوز - نظیر regedit.exe - مستقیماً در محتوای رجیستری، دخل و تصرف کند.

تاریخچه

ام اس داس داده‌های پیکربندی خود را از طریق فایل‌های confing.sys و autoexec.bat به دست می‌آورد و در ویندوز ۳٫۰ میکروسافت محدودیت‌های confing.sys و autoexec.bat را تا اندازه‌ای با ارائه فایل‌های INI برای ذخیره‌سازی تنظیمات بر طرف نمود.
فایل‌های INI فایل‌هایی متنی هستند که از یک یا چند بخش تشکیل می‌شوند و یک یا چند مورد از تنظیمات در هر بخش قرار می‌گیرد. مشکل فایل‌های INI آن است که فاقد ساختار سلسله مراتبی می‌باشند، ذخیره‌سازی فایل‌های باینری در آن دشوار بوده و هیچ گونه استانداردی برای ذخیره‌سازی انواع تنظیمات مشابه ارائه نمی‌کنند.
مشکل بزرگ‌تر فایل‌های INI و نگارشهای اولیه ویندوز تعداد زیاد این فایل‌ها در کامپیوترها بود. هر برنامه کاربردی فایل‌های INI خاص خود داشت.
ویندوز ۳٫۱ رجیستری را به عنوان ابزاری برای ذخیره‌سازی تنظیمات OLE (گنجاندن و مرتبط کردن شیئ‌ها) معرفی نمود، و ویندوزهای ۹۵ وnt 3.5 نیز آن را به بانک اطلاعاتی پیکربندی گسترش دادند که ویندوز xp و نسخه‌های جدیدتر ویندوز از آن استفاده می‌کنند.
اگرچه فایل‌های INI دیگر به دلیل آن که برنامه‌های کاربردی روش بسیار بهتری برای ذخبره‌سازی تنظیمات دارند، ضروری نیستند، اما هنوز هم تعدادی از آن‌ها را در برخی کامپیوترها خواهید یافت، مثلاً win.ini.

ساختار رجیستری

ساختار رجیستری، شباهت زیادی به ساختارِ منطقیِ یک دیسک دارد؛ رجیستری، شامل چندین کلید (Key) است که مفهوم آن‌ها مشابه دایرکتوری در دیسک بوده و هر کلید هم، شامل چندین مقدار (Value) است که مثل فایل‌هایی درون دایرکتوری‌ها قرار دارند. مقادیر که در واقع خانه‌هایی برای نگهداری داده‌ها هستند، از سه مؤلفه تشکیل می‌شوند: نام، نوع و داده.
هر کلید می‌تواند شامل تعدادی کلید دیگر هم باشد که در این صورت به آن‌ها زیر-کلید (Sub-key) گفته می‌شود. زیر-کلیدها هم به نوبهٔ خود می‌توانند شامل زیر-کلیدهای دیگری باشد و الخ. کلیدهایی که در بالاترین سطح قرار دارند، ریشه (Root) خوانده می‌شوند؛ بنابراین، بجز ریشه‌ها، تمام کلیدهای دیگر را می‌توان زیر-کلید به حساب آورد.
همان‌طور که از تصویر فوق پیداست، هر زیر-کلید دارای یک مقدار به نام (Default) است که به صورت پیش‌فرض، داده‌ای درون آن قرار ندارد (value not set).
ساختار سلسله مراتبی رجیستری، شباهت فراوانی به ساختار «درخت» دارد. در ادبیات علم رایانه، منظور از درخت، نوعی ساختار دادهٔ پویا (دینامیک) است که شرح و وصف آن در مبحث «ساختمان داده‌ها» ذکر می‌شود. در اینجا به ذکر همین نکته بسنده می‌کنیم که رجیستری شامل چندین درخت است که گره‌های آن‌ها حاوی کلید و برگ‌های آن‌ها حامل مقدار هستند.
گفتنی است ساختار اولیهٔ رجیستری که به صورت یک پیش‌الگو (Prototype) تدوین شده و شامل یک سِری تنظیمات اولیه و پیش‌فرض است که همراه با خودِ ویندوز و در خلالِ عملیاتِ نصبِ سیستم‌عامل، بر روی دیسک‌سخت کپی می‌شود.