Thứ Ba, 23 tháng 7, 2013

Registry

Nếu bạn đã từng làm việc với các hệ điều hành Windows, chắc hẳn ít nhiều bạn đã từng nghe qua hoặc là nhìn thấy registry. Bạn không thể nói được quá nhiều về Windows internals mà không thể không biết về registry bởi vì nó là cơ sở dữ liệu hệ thống chứa những thông tin cần cho hệ thống để boot được và các thông tin về cấu hình hệ thống, các thiết lập phần mềm trên toàn hệ thống để điều khiển hoạt động của Windows, cơ sở dữ liệu an ninh (the security database), các thiết lập cấu hình cho mỗi người dùng (ví dụ như screen saver nào được sử dụng).

Ngoài ra, registry là một cửa sổ vào trong dữ liệu không ổn định trong bộ nhớ, ví dụ như trạng thái phần cứng hiện hành của hệ thống (device drivers nào được nạp, resources chúng đang sử dụng,..) cũng như là Windows performance counters. Performance counters không thực sự trong registry, được truy nhập thông qua registry functions. Tôi sẽ nói về cách performance counter được truy nhập từ registry trong các phần tiếp theo.

Mặc dù nhiều Windows users và administrator sẽ chẳng cần thiết phải nhìn trực tiếp vào registry (bởi vì bạn có thể view hoặc thay đổi hầu hết các thiết lập cấu hình với các tiện ích dành cho người quản trị), nhưng nó vẫn là nguồn thông tin hữu dụng bởi vì nó chứa nhiều thiết lập gây ảnh hưởng đến hiệu suất của hệ thống cũng như là cư xử của hệ thống. (Nếu bạn quyết định thay đổi trực tiếp các thiết lập registry, bạn phải thực hành một cách cực kỳ thật trọng; bất cứ một sự thay đổi nào cũng có thể gây ảnh hưởng xấu đến hiệu suất của hệ thống hoặc có thể làm cho hệ thống không boot được). Hầu hết registry keys được nhắc tới trong bài viết đều nằm dưới HKEY_LOCAL_MACHINE, ngắn gọn là HKLM.

Registry đóng vai trò "chìa khóa" trong hệ thống cấu hình và điều khiển Windows. Nó là một kho lưu trữ cho các thiết lập toàn hệ thống và cho mỗi user. Mặc dù hầu hết con người ta nghĩ về registry như là static data được lưu trên hard disk, như bạn thấy trong bài viết, registry còn là một window bên trong các cấu trúc khác nhau trong bộ nhớ được duy trì bởi Windows executive và kernel. Bài viết này không mang ý nghĩa cung cấp tất cả những gì có liên quan đến các nội dung của Windows registry. Đó là một kiểu thông tin chuyên sâu được có trong tài liệu “Technical Reference to the Windows2000 Registry” help file nằm trong Windows 2000 resource kits (Regentry.chm), và đối với Windows XP và Windows Server 2003, các thông tin này có thể được tìm thấy trên mạng như là một phần của Windows Server 2003 Deployment Kit tại http://www.microsoft.com/windowsserver2003/techinfo/reskit/
deploykit.mspx.

Bước đầu, tôi sẽ cung cấp cho bạn một cái nhìn toàn cảnh về registry structure, một thảo luận về các kiểu dữ liệu nó hỗ trợ, và một cuộc dạo chơi để tìm hiểu về các thông tin quan trọng Windows duy trì trong registry. Sau đó chúng ta sẽ khai thác internals configuration manager, thành phần thực thi chịu trách nhiệm cho việc implementing registry database. Tôi sẽ cover cấu trúc trên đĩa của registry, làm cách nào Windows lấy được thông tin cấu hình khi một ứng dụng yêu cầu nó, và những tiêu chuẩn nào được thực hiện để bảo vệ cơ sở dữ liệu hệ thống quan trọng.

Viewing and Changing the Registry

Nói chung, bạn không nên edit registry một cách trực tiếp: các thiết lập ứng dụng và hệ thống được lưu trong registry có thể được thay đổi một cách thủ công nên có một user interface tương ứng để điều khiển việc chỉnh sửa. Tuy nhiên, như bạn đã thấy, một vài thiết lập nâng cao và debug không có editing user interface. Do đó, có một số lượng công cụ được tích hợp vào trong Windows để giúp bạn view và modify registry.

Windows 2000 có 2 tools để editing registry - Regedit.exe và Regedt32.exe - trái lại Windows XP và Windows Server 2003 chỉ có Regedit.exe. Nguyên nhân ? Đó là do phiên bản Regedit của Windows 2000 có khả năng tìm kiếm, importing, và exporting linh hoạt, được ported từ Windows 98 và do đó không hỗ trợ cho editing hoặc viewing registry security hoặc registry không được định nghĩa trên Windows 98. Windows 2000 includes Regedt32 bởi vì mặc dù nó không có những đặc tính mạnh mẽ về tìm kiếm hay là importing, exporting, nó được viết ra chỉ để chạy trên Windows 2000 và do đó nó hỗ trợ security và các kiểu dữ liệu chỉ có riêng trên Windows 2000. Regedit được included trong Windows XP và Windows Server 2003 includes security editing và nó hiểu tất cả các kiểu dữ liệu registry, và do đó không cần đến Regedt32.

Cũng có một số lượng registry tools sử dụng command-line. Ví dụ, Reg.exe, những gì được included trong Windows XP và Windows Server 2003 và available trong Windows 2000 Support tools, có khả năng import, export, back up, và restore keys, cung như là so sánh, modify, và delete keys và values.

Registry Usage

Có 3 thời điểm chủ yếu mà dữ liệu cấu hình được đọc:

  • Trong suốt quá trình boot, hệ thống đọc các thiết lập để xác định xem các device drivers để load và cách các subsystems khác nhau - ví dụ như memory manager và process manager - cấu hình chính chúng và điều chỉnh cư sử hệ thống. 
  • Trong suốt quá trình login, Explorer và các thành phần Windows khác đọc các ưu tiên trên mỗi user từ registry, bao gồm network drive-letter mappings, hình nền desktop, screen saver, menu behavior, và vị trí đặt icon. 
  • Trong suốt quá trình startup, các ứng dụng đọc các thiết lập toàn hệ thống, ví dụ như danh sách các thành phần cài đặt tùy chọn và licensing data, cũng như là các thiết lập trên mỗi user có thể include vị trí của menu và toolbar và danh sách các document được truy nhập gần đay nhất. 
Tuy nhiên registry có thể được đọc tại bất cứ thời điểm nào cũng được, ví dụ như trong một hồi đáp đến sự kiện thay đổi registry key hoặc value. Một vài ứng dụng monitor các thiết lập cấu hình trong registry và đọc các thiết lập được cập nhật khi chúng nhìn thấy sự thay đổi. Nói chung, tuy nhiên, trên một idle system có thể không có registry activity.

Registry thường bị modified trong các trường hợp phổ biến sau:

  • Mặc dù không phải là sự thay đổi, cấu trúc bên trong registry và nhiều thiết lập mặc định được định nghĩa bởi một prototype version của registry được ships trên Windows setup media được copied trên một cài đặt mới. 
  • Các cài đặt ứng dụng tạo các thiết lập mặc định ứng dụng và các thiết lập mà phản ánh các lựa chọn cấu hình cài đặt. 
  • Trong suốt quá trình cài đặt một device driver, hệ thống Plug and Play tạo các thiết lập trong registry để nói cho I/O manager cách để start driver và tạo các thiết lập khác mà cấu hình hoạt động của driver. 
  • Khi bạn thay đổi ứng dụng hoặc các thiết lập hệ thống thông qua user interfaces, những sự thay đổi này thường được lưu trong registry. 

Note: Buồn thay, một vài ứng dụng thăm dò ý kiến của registry bởi việc tìm kiếm những thay đổi khi chúng sử dụng hàm RegNotifyChangeKey, những gì đặt một thread vào trạng thái sleep cho đến khi một thay đổi xảy ra đến một vùng của registry nơi chúng chú ý.

Registry Data Types 

Registry là một cơ sở dữ liệu sở hữu một cấu trúc tương tự như là của disk volume. Registry chứa keys, những gì tương tự như là các thư mục trên đĩa, và values , những gì được so sánh với files trên một đĩa. Một key là một container có thể chứa keys khác (subkeys) hoặc values. Values, mặt khác, lưu dữ liệu. Keys ở mức cao nhất được gọi là root keys. Tôi sẽ sử dụng thuật ngữ subkey key thay phiên nhau. (Chỉ root keys không phải là subkeys.)

Cả keys và values đều sử dụng quy tắc đặt tên của file system. Do đó, bạn có thể nhận dạng một value với name mark, những gì được lưu trong một key được gọi là trade, với name trade\mark. Một ngoại lệ đối với naming scheme này đó là mỗi key's unamed value. Hai Registry Editor, Regedit và Regedt32, display những giá trị: Regedit displays unamed value như (Default); Regedit32 sử dụng <No Name>.

Values lưu các kiểu dữ liệu khác nhau và có thể là một trong 15 kiểu được liệt kê trong Table 4-1. Các giá trị chính của registry là REG_DWORD, REG_BINARY, hoặc REG_SZ. Values của kiểu REG_DWORD có thể lưu các số hoặc Booleans; REG_BINARY values có thể lưu các số lớn hơn 32 bits hoặc raw data như là encrypted passwords; REG_SZ lưu strings (UNICODE, dĩ nhiên) mà có thể biểu diễn các nhân tố như names, filenames, paths, và types.



Kiểu REG_LINK khá hấp dẫn bởi vì nó để một key trỏ đến một key hoặc một giá trị khác. Khi bạn đi qua registry thông qua một link, path searching tiếp tục tại đích của một link. Cho ví dụ, nếu \Root1\Link có một REG_LINL value \Root2\RegKey, và RegKey chứa giá trị RegValue, 2 paths nhận dạng RegValue: \Root1\Link\RegValue và \Root2\RegKey\RegValue. Như được giải thích trong phần tiếp theo, Windows sử dụng registry links: 3 trong 6 registry root keys là các liên kết đến subkeys bên trong 3 root keys không phải link. Links không được lưu lại; chúng phải được tạo một cách động sau mỗi lần reboot. 

Registry Logical Structure 

Bạn có thể chart một tổ chức của registry thông qua dữ liêu được lưu bên trong nó. Có 6 root keys (và bạn không thể thêm mới hay xóa đi những root keys đã tồn tại) lưu thông tin, nhưng trong Table 4-2

Table 4-2 The Six Root Keys

HKEY_CURRENT_USER: lưu dữ liệu liên quan đến user đang logged-on
HKEY_USERS: lưu thông tin về tất cả accounts trên một máy
HKEY_CLASSES_ROOT: lưu file liên quan và Component Object Model (COM) object registration information. 
HKEY_LOCAL_MACHINE: lưu thông tin liên quan đến hệ thống
HKEY_PERFORMANCE_DATA: lưu thông tin về performance
HKEY_CURRENT_CONFIG : lưu một vài thông tin về current hardware profile


Tại sao root-key names bắt đầu với H? Bởi vì root-key names biểu diến Windows handle (H) đến keys. Table 4-3 lists tất cả root keys và viết tắt của chúng

HKEY_CURRENT_USER

HKCU root key chứa dữ liệu liên quan đến preferences (các ưu tiên) và cấu hình phần mềm của user logged-on. N

1 nhận xét:

  1. anh ơi, cho em hỏi mục HKEY_LOCAL_MACHINE/SOFTWARE/Licenese là để lưu gì thế ạ? Em xóa hết mọi thứ trong đó( trừ Default) thif cos sao không ạ?

    Trả lờiXóa