Windows Registry เป็นชุดของ Configurations, Values และ Properties ของ Windows Applications รวมถึง Windows OS เอง ที่จัดเก็บอย่างเป็นลำดับชั้น (Hierarchical) ใน Repository เดียว
เมื่อโปรแกรมใหม่ถูกติดตั้งใน Windows ระบบจะสร้าง Entry ใน Windows Registry พร้อม Attributes เช่น ขนาด, เวอร์ชัน, ตำแหน่งจัดเก็บ ฯลฯ
เนื่องจากข้อมูลจัดเก็บใน Database ระบบปฏิบัติการจึงทราบทรัพยากรที่ใช้งาน แอปพลิเคชันอื่นๆ ก็ได้ประโยชน์ เพราะทราบ Conflict ที่อาจเกิดขึ้น หากทรัพยากร/ไฟล์บางอย่าง Co-exist
Windows Registry คืออะไร & ทำงานอย่างไร?
Windows Registry คือหัวใจของการทำงานของ Windows ระบบปฏิบัติการเพียง Windows ที่ใช้ Central Registry Approach หากจินตนาการ ทุกส่วนของ OS ต้องโต้ตอบกับ Registry ตั้งแต่ Boot Sequence จนถึงการ Rename ไฟล์ธรรมดา
ง่ายๆ คือ Database เหมือน Library Card Catalog Entries ใน Registry เหมือนกองการ์ดใน Catalog Registry Key = การ์ดหนึ่งใบ Registry Value = ข้อมูลสำคัญบนการ์ด Windows ใช้ Registry จัดเก็บข้อมูลควบคุมและจัดการระบบและซอฟต์แวร์ อาจเป็น Hardware Info, User Preferences, File Types การ Config Windows เกือบทุกอย่างเกี่ยวข้องกับการแก้ไข Registry
ประวัติ Windows Registry
Windows รุ่นแรก Developer ต้องใส่ .ini File แยกมาด้วย Executable File .ini เก็บ Settings, Properties, Config สำหรับ Executable นั้นทำงานได้ แต่ไม่มีประสิทธิภาพ เนื่องจากข้อมูลซ้ำซ้อน และเป็นช่องโหว่ด้านความปลอดภัย จึงจำเป็นต้องมีเทคโนโลยีใหม่: Standardized, Centralized, Secure
Windows 3.1 ตอบสนองด้วย Central Database เรียกว่า Windows Registry แต่มันจำกัดมาก แอปเก็บได้แค่ Config บางอย่างของ Executable ต่อมา Windows 95 และ Windows NT พัฒนาต่อ เน้น Centralization เป็น Core Feature
การจัดเก็บใน Registry เป็นตัวเลือกสำหรับ Developer หากสร้าง Portable App ไม่ต้องเพิ่มข้อมูลใน Registry สร้าง Local Storage พร้อม Config, Properties, Values ได้เลย
ความเกี่ยวข้องของ Windows Registry เทียบ OS อื่น
Windows เป็น OS เดียวที่ใช้ Central Registry ทุกส่วนของ OS ต้องโต้ตอบ Registry ตั้งแต่ Boot จนถึง Rename File
OS อื่นๆ: iOS, macOS, Android, Linux ใช้ Text Files ในการ Config และปรับพฤติกรรม OS
Linux Part ส่วนใหญ่ เก็บ Config เป็น .txt ไฟล์ .txt ทั้งหมดถือว่า Critical System Files พยายามเปิดจะไม่ได้ OS ซ่อนไว้เพื่อความปลอดภัย เพราะ Config ของ Network Card, Firewall, OS, GUI, Video Card Interface ฯลฯ อยู่ใน ASCII Format
macOS และ iOS ใช้ .plist Extension แทน .txt เก็บ Config ของ System และ App ทั้งหมด แต่ประโยชน์ของ Singular Registry ยังมากกว่าการเปลี่ยน Extension อย่างง่าย
ประโยชน์ของ Windows Registry
ทุกส่วนของ OS ติดต่อ Registry ตลอดเวลา จึงต้องจัดเก็บใน Storage ที่เร็วมาก Database นี้ออกแบบมาเพื่อ Fast Reads/Writes และ Efficient Storage
ขนาด Registry Database ปกติ 15-20 MB เล็กพอที่จะ Load อยู่ใน RAM (Random Access Memory) Storage ที่เร็วที่สุดของ OS ตลอดเวลา
Registry ต้อง Load ใน Memory ตลอดเวลา หาก Registry ใหญ่เกิน จะไม่เหลือพื้นที่ให้ App อื่นรันได้ ส่งผลประสิทธิภาพ OS จึงออกแบบมา Highly Efficient
Multi-User Scenario: หลาย User ใช้ Device เดียวกัน และใช้ App ร่วมกัน การติดตั้ง App ซ้ำหลายครั้งเป็นการสูญเปล่า Storage Registry ช่วย Share App Config ระหว่าง User ได้
ไม่แค่ลด Storage ยังให้ Access เปลี่ยน Config ของ App จาก Single Point ประหยัดเวลา ไม่ต้องไปแก้ .ini ทีละไฟล์
Multi-User มากใน Enterprise ต้องการ User Privilege Access Registry รองรับ Privacy-based Access ได้ดี Network Admin ควบคุม Allow/Deny ตามงาน ทำให้ Database เหล่านี้ Versatile และ Robust อัปเดตพร้อมกันผ่าน Remote Access Registry หลาย Device ใน Network
Windows Registry ทำงานอย่างไร?
มาดู Elements พื้นฐานของ Windows Registry:
Registry ประกอบด้วย 2 Elements หลัก:
- Registry Key = Container Object (เหมือน Folder ที่เก็บไฟล์หลายประเภท)
- Registry Values = Non-container Objects (เหมือนไฟล์ ทุก Format)
ควรรู้เพิ่ม: How to Take Full Control or Ownership of Windows Registry Keys
เข้าถึง Windows Registry ยังไง?
เข้าถึงและ Config Registry ด้วย Registry Editor Tool Microsoft ให้ฟรีมาทุก Windows Version
เปิด Registry Editor: พิมพ์ "Regedit" ใน Command Prompt หรือพิมพ์ "Regedit" ใน Search/Run Box จาก Start Menu Editor นี้คือ Portal เข้าถึง Registry ช่วย Explore และแก้ไข Registry Registry เป็น Umbrella Term สำหรับ Database Files หลายไฟล์ใน Directory ของ Windows Installation
ปลอดภัยไหมที่จะ Edit Registry Editor?
หากไม่รู้ว่ากำลังทำอะไร อันตรายมาก ที่จะเล่นกับ Registry Config ตอน Edit Registry ต้องปฏิบัติตามคำแนะนำอย่างเคร่งครัด และเปลี่ยนแค่สิ่งที่ได้รับคำสั่ง
ถ้าลบอะไรใน Registry ผิดพลาด อาจเปลี่ยน Config ระบบ นำไปสู่ Blue Screen of Death หรือ Windows Boot ไม่ขึ้น
แนะนำ Backup Windows Registry ก่อนแก้ไข สร้าง System Restore Point (Backup Registry อัตโนมัติ) ใช้ย้อนกลับได้ หากทำตามคำสั่งอย่างเคร่งครัด ไม่ควรมีปัญหา หากต้อง Restore Registry มี Tutorial แยก
สำรวจโครงสร้าง Windows Registry
มี User ใน Inaccessible Storage Location สำหรับ OS เท่านั้น
Keys โหลดขึ้น RAM ตอน Boot และสื่อสารตลอดเวลา ทุกช่วงเวลาหรือเมื่อมี System-level Event
ส่วนหนึ่งของ Registry Keys จัดเก็บใน Hard Disk เรียกว่า Hives ส่วนนี้มี Registry Keys, Subkeys, Values การเข้าถึงขึ้นอยู่กับ Privilege ของ User
Keys ที่ยอดเฉียบของ Hierarchy เริ่มต้นด้วย HKEY ถือว่าเป็น Hives
ใน Editor Hives อยู่ซ้ายมือ เมื่อมอง Keys ทั้งหมดโดยไม่ Expand นี่คือ Registry Keys ที่โชว์เป็น Folder
มาสำรวจโครงสร้าง Windows Registry Key และ Subkeys:
ตัวอย่าง Key Name: HKEY_LOCAL_MACHINE\SYSTEM\Input\Break\loc_0804
loc_0804 = Subkey ของ Break = Subkey ของ Input = Subkey ของ SYSTEM ของ Root Key HKEY_LOCAL_MACHINE
Common Root Keys ใน Windows Registry
แต่ละ Key ด้านล่างเป็น Hive ของตัวเอง ประกอบด้วย Keys ย่อยภายใน Top-level Key
i. HKEY_CLASSES_ROOT
Registry Hive นี้ประกอบด้วย File Extension Association Info, Programmatic Identifier (ProgID), Interface ID (IID) Data, Class ID (CLSID)
HKEY_CLASSES_ROOT เป็น Gateway สำหรับ Action/Event ใดๆ ใน Windows OS ตัวอย่าง: เข้าถึงไฟล์ MP3 ใน Downloads Folder OS รัน Query ผ่านนี้เพื่อ Action ที่ต้องการ
พอเข้าถึง HKEY_CLASSES_ROOT Hive จะ overwhelmed ด้วย Extension Files เยอะมาก แต่ Keys เหล่านี้คือสิ่งที่ทำให้ Windows ทำงานลื่นไหล
ตัวอย่าง HKEY_CLASSES_ROOT Hive Registry Keys:
HKEY_CLASSES_ROOT\.otf HKEY_CLASSES_ROOT\.htc HKEY_CLASSES_ROOT\.img HKEY_CLASSES_ROOT\.mhtml HKEY_CLASSES_ROOT\.png HKEY_CLASSES_ROOT\.dll
Double-click เปิดไฟล์เช่น รูปภาพ OS ส่ง Query ผ่าน HKEY_CLASSES_ROOT คำสั่งว่าทำไหนเมื่อ Request ไฟล์ประเภทนั้น ชัดเจน จบที่เปิด Photo Viewer แสดงรูป
ตัวอย่าง Registry Call ไปที่ HKEY_CLASSES_ROOT\.jpg Key HKEY_CLASSES_ROOT Hive เป็นข้อมูลรวมจาก HKEY_LOCAL_MACHINE (HKEY_LOCAL_MACHINE\Software\Classes) และ HKEY_CURRENT_USER (HKEY_CURRENT_USER\Software\Classes) หาก Key มี 2 ที่ จะ Conflict ข้อมูลใน HKEY_CURRENT_USER\Software\Classes จะถูกใช้ใน HKEY_CLASSES_ROOT เข้าถึงได้โดยเปิด HKEY_CLASSES Key ด้านซ้าย
ii. HKEY_LOCAL_MACHINE
Registry Hive หลักเก็บ Settings เฉพาะ Local Computer Global Key ข้อมูลในนี้ User/Program ไม่สามารถแก้ไขได้ เนื่องจาก Global Nature ข้อมูลทั้งหมดเป็น Virtual Container รันบน RAM ตลอด
Config ส่วนใหญ่ของ Software ที่ติดตั้ง และ Windows OS เอง อยู่ใน HKEY_LOCAL_MACHINE Hardware ที่ตรวจพบทั้งหมดอยู่ที่นี่
อ่านเพิ่ม: Fix Regedit.exe Crashes when searching through Registry
Registry Key นี้แบ่งเป็น 7 Sub-keys:
- SAM (Security Accounts Manager) - เก็บ Password User แบบ Secured Format (LM Hash และ NTLM Hash) Hash Function = Encryption ปกป้อง Account Info ไฟล์ Locked อยู่ที่ C:\WINDOWS\system32\config ไม่ย้าย/คัดลอกได้ระหว่าง OS Run Windows ใช้ SAM Authenticate User เวลา Login คำนวณ Hash ของ Password ที่กรอก ถ้าเท่ากับ Hash ใน SAM Registry File เข้าได้ ไฟล์นี้ Hacker เป้าหมายหลัก
- Security (เข้าถึงได้แค่ Admin) - Registry Key Local สำหรับ Admin Account ที่ Login อยู่ ถ้า Organization จัดการ System User เข้าไม่ได้ เว้นแต่ให้ Admin Access เปลี่ยน ถ้าเปิดโดยไม่มี Admin Privilege จะว่างเปล่า ถ้า System เชื่อม Admin Network Key นี้ Default ไปที่ Local System Security Profile ที่ Organization จัดการ SAM Link กับ Security หลัง Authenticate 成功 Local/Group Policies จะ Apply ตาม Privilege Level
- System (Critical Boot Process และ Kernel Functions) - เก็บ Info สำคัญของระบบ: Computer Name, Hardware ที่ Mounted, Filesystem, Automated Actions ใน Event ต่างๆ (เช่น BSOD จาก CPU Overheat มี Procedure อัตโนมัติ) เข้าถึงได้แค่ User ที่มี Admin Privilege พอ Boot Logs จะ Dynamic Save/Read ที่นี่ System Parameters เช่น Control Sets (Alternative Configurations)
- Software - Third-party Software Configs เช่น Plug and Play Drivers เก็บ Software และ Windows Settings ที่ Link กับ Hardware Profile ที่มีอยู่ เปลี่ยนได้โดย Apps และ System Installers Developer จำกัด/อนุญาต Info ที่ User เข้าถึงได้ผ่าน "Policies" Subkey Enforce Usage Policies บน Apps และ System Services รวม Certificates สำหรับ Authenticate/Authorize/Disallow Systems/Services
- Hardware - Subkey สร้าง Dynamic ระหว่าง System Boot
- Components - System-wide Device-specific Component Config Info
- BCD.dat (ใน \boot folder ใน System Partition) - Critical File ที่ System อ่านและ Execute ตอน Boot Sequence โดย Load Registry ไป RAM
iii. HKEY_CURRENT_CONFIG
Exist เพื่อเก็บ Video และ Network Settings อาจรวม Video Card Info: Resolution, Refresh Rate, Aspect Ratio ฯลฯ และ Network
เป็น Registry Hive ส่วนหนึ่งของ Windows Registry เก็บ Hardware Profile ที่ใช้งานอยู่ HKEY_CURRENT_CONFIG เป็น Pointer ไปที่ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\HardwareProfiles\Current Registry Key Pointer ไปที่ Active Hardware Profile ใต้ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\HardwareProfiles
HKEY_CURRENT_CONFIG ช่วย View/Modify Config ของ Current User's Hardware Profile ทำได้ใน 3 Location ที่กล่าวมา เพราะเหมือนกันทั้งหมด
iv. HKEY_CURRENT_USER
Registry Hive เก็บ Settings และ Config สำหรับ Windows และ Software เฉพาะ Currently Logged-in User ตัวอย่าง: Registry Values ใน Keys ภายใต้ HKEY_CURRENT_USER ควบคุม User-level Settings: Keyboard Layout, Printers, Desktop Wallpaper, Display Settings, Mapped Network Drives ฯลฯ
Settings ใน Control Panel Applets มากมาย เก็บใน HKEY_CURRENT_USER เนื่องจาก User-specific บน Computer เดียวกัน Keys/Values ใน Hive นี้จะต่าง User ต่อ User ไม่เหมือน Hives อื่นที่ Global (Same Info ทุก User)
คลิกซ้าย Registry Editor เข้าถึง HKEY_CURRENT_USER ได้ เป็น Security Measure Info ใน HKEY_CURRENT_USER เป็น Pointer ไป Key ใต้ HKEY_USERS Hive เป็น Security Identifier (SID) เปลี่ยนที่ไหนก็มีผลทันที
v. HKEY_USERS
มี Subkeys ตรงกับ HKEY_CURRENT_USER Keys สำหรับแต่ละ User Profile เป็น Registry Hive หนึ่งในหลายตัว
User-specific Config Data ทุกคนที่ใช้ Device อยู่ ข้อมูลอยู่ใต้ HKEY_USERS ระบุ User ได้ด้วย Security Identifier (SID) ที่ Log Config Changes ทั้งหมดของ User
Active Users ทุกคนที่ Account อยู่ใน HKEY_USERS ขึ้นอยู่กับ Privilege ที่ System Admin ให้ เข้าถึง Shared Resources: Printers, Local Network, Local Storage, Desktop Background ฯลฯ Account แต่ละตัวมี Registry Keys/Values ใต้ SID ของ Current User
Forensic Info: แต่ละ SID เก็บ Data มหาศาลของ User ทุก Event/Action ใต้ Account: User Name, Login Count, Last Login Date/Time, Last Password Change Date/Time, Failed Logins Count ฯลฯ รวม Registry Info ตอน Windows Load และอยู่ที่ Login Prompt
แนะนำอ่าน: Fix The Registry editor has stopped working
Registry Keys สำหรับ Default User เก็บใน File ntuser.dat ใน Profile ต้อง Load เป็น Hive ด้วย Regedit เพื่อ Add Settings ให้ Default User
Data Types ที่เจอใน Windows Registry
Keys/Subkeys ทั้งหมดมี Configs, Values, Properties ใน Data Types ต่อไปนี้ (มักเป็น Combination):
- String Values เช่น Unicode (Standard Encoding Text)
- Binary Data
- Unsigned Integers
- Symbolic Links
- Multi-string Values
- Resource List (Plug and Play Hardware)
- Resource Descriptor (Plug and Play Hardware)
- 64-bit Integers
สรุป
Windows Registry ไม่ใช่แค่การปฏิวัติ ลด Security Risk จากการใช้ Text Files เก็บ Config และลดจำนวน .ini Files ที่ Developer ต้อง Ship ด้วย ประโยชน์ของ Centralized Repository สำหรับ Frequently Accessed Data ของ System และ Software ชัดเจนมาก
ความสะดวกเข้าถึง Customizations และ Settings ที่ Central Place ทำให้ Windows เป็น Platform ที่ Developer ชอบสำหรับ Desktop Apps เห็นได้จาก Volume ของ Desktop Software บน Windows มากกว่า macOS มาก สรุป: พูดถึง Windows Registry ทำงานยังไง File Structure และ Significance ของ Registry Key Configs ต่างๆ รวมถึงใช้ Registry Editor ให้เกิดประโยชน์สูงสุด