Đọc và ghi vào registry – Read and write to registry

registry Registry được xem là một “chìa khóa tối thượng” để xâm nhập vào Windows và hầu như chỉ dùng cho giới chuyên môn cao. Với những người dùng bình thường thì Registry của Windows gần như là một “đám rừng” gần như không có lối ra. Do đó, bài viết này sẽ giúp cho các bạn có những kiến thức cơ bản  cũng như các đọc và ghi vào registry khi lập trình với ngôn ngữ C#.

1. Một vài kiến thức cơ bản về Registry

–  Registry là một cơ sở dữ liệu dùng để lưu trữ mọi thông số kỹ thuật của Windows. Nó ghi nhận tất cả các thông tin khi bạn thay đổi hoặc chỉnh sửa trong Menu Settings, Control Panel v.v

–  Trong Window 95 và Windows 98 thì Registry được lưu lại trong 2 file là: user.dat và system.dat trong thư mục Windows. Trong Windows Me, Registry được lưu trong file Classes.dat trong thư mục Windows. Trong Windows 2000 và Windows XP, thì Registry được lưu trong thư mục “Windows\System32\Config”.

–  Bạn có thể chỉnh sửa Registry của các Windows bằng trình Registry Editor có sẵn trong Windows bằng cách vào cửa sổ Run và gõ lệnh “Regedit”.

–  Registry có cấu trúc hình cây, tương tự như cấu trúc của cây thư mục với rất nhiều nhánh con tỏa ra tùy theo cấu trúc ứng dụng. Thông thường Registry của Windows có 5 nhánh chính, mỗi nhánh đảm nhận viện lưu trữ những thông tin riêng biệt. Mỗi nhánh chính tỏa ra rất nhiều nhánh con và những nhánh con này cũng lưu trữ vô số thông tin đặc thù về mọi thứ có trong Windows.image

  • HKEY_CLASSES_ROOT: Lưu những thông tin dùng chung cho toàn bộ hệ thống.
  • HKEY_CURRENT_USER: Lưu những thông tin cho người dùng đang sử dụng hoặc đăng nhập vào Windows.
  • HKEY_LOCAL_MACHINE: Lưu những thông tin về hệ thống, phần cứng, phần mềm…
  • HKEY_USERS: Lưu những thông tin của tất cả các User (người dùng), mỗi user là một nhánh với tên là số ID định dạng của user đó.
  • HKEY_CURRENT_CONFIG: Lưu thông tin về phần cứng hiện tại đang dùng.

–  Những người dùng thành thạo Windows muốn hiểu sâu hơn về hệ thống đều cần tìm hiểu kỹ về Registry càng nhiều càng tốt vì những lý do sau:

  • Registry lưu tất cả các thông tin về phần cứng, phần mềm, những lựa chọn của người dùng….kiểm soát được nội dung của Registry là yêu cầu tất yếu để bạn sử dụng máy tính một cách khoa học, hiểu sâu hơn về môi trường làm vịệc của Windows.
  • Muốn tiến xa hơn trong kỹ thuật lập trình trên nền Windows, cách bảo mật, thậm chí bẻ khóa phần mềm hay đột nhập vào máy tính của người khác… thì bạn đều cần phải có hiểu biết nhất định về Registry.
  • Hầu hết các thủ thuật trong Windows mà các tạp chí tin học tên tuổi đã đăng tải đều liên quan mật thiết đến Registry. Các công cụ có thể tác động vào Windows do giới phần mềm tạo nên đa số cũng đều dựa trên cơ sở “xâm nhập” Registry bằng các công cụ được thiết kế thân thiện và trực quan hơn.

2. Lưu ý khi sử dụng Registry Editor

warning

     –  Tất cả mọi thứ tồn tại trong hệ thống Windows đều để lại những “mật mã” hoặc chìa khóa cực kỳ trọng yếu trong Registry. Việc tác động vào những mã khóa này có thể chỉ ảnh hưởng đến một phần nhỏ nào đó của Windows, nhưng đôi khi có tác động đến toàn bộ hệ thống. Khi “trót dại” chỉnh sửa sai một vài “key” tối quan trọng nào đó là có thể làm cho Winsows bị tê liệt hoặc hư hỏng hoàn toàn.

–  Khi bạn đã “dám” xâm nhập vào Registry Editor điều bắt buộc trước tiên là bạn phải sao lưu lại Registry của mình bằng cách chạy Registry Editor -> File -> Export và lưu file có đuôi .REG này vào chỗ an toàn để nếu có chỉnh sửa sai thì vẫn phục hồi lại được nguyên trạng hệ thống. Khi muốn phục hồi lại Registry nguyên thủy thì vào lại Registry Editor -> File -> Import -> Tìm đến file .REG đã lưu để tiến hành phục hồi.

–  Dòng chữ đứng sau các từ: User Key, Sytem Key, hoặc Key cho biết đường dẫn đến nhánh cần sửa chữa hoặc tạo mới nếu nó không tồn tại. Lưu ý rằng User Key là để thay đổi đó có tác dụng với người đang đăng nhập (Logon);  System Key là để thay đổi đó có tác dụng với tất cả người dùng.

  • Dòng Name là tên của khoá cần tạo, nó là nhánh con bên cửa sổ bên phải của Registry.
  • Dòng Type là kiểu dữ liệu của khoá mới tạo.
  • Dòng Value là giá trị của khoá.

–  Sau khi đã sao lưu Registry gốc và biết cách phục hồi, hầu như bạn đã có thể thoải mái “tung hoành” trong Registry. Để trở thành một “chuyên gia Registry” thực sự không phải là quá khó khăn, bạn chỉ cần có một vốn tiếng Anh đủ để đọc và hiểu đúng tất cả những gì mà Microsoft đã trình bày bằng tiếng Anh trong Windows.

–  Khi đã hiểu hết mọi từ ngữ trong Registry, bạn có thể vào “vọc” bằng cách chỉnh sửa lại các thông số mặc định bằng các thông số của mình, sau đó lưu lại Registry, thoát khỏi tài khoản User đang dùng, đăng nhập lại vào tài khoản đã bị chỉnh Registry, truy vào khoản mục đã chỉnh sửa để xem tác dụng của nó. Nếu nó quá nhanh, quá chậm hoặc… “liệt” hoàn toàn thì bạn nên vào lại Registry để điều chỉnh nó về lại thông số cũ. Nếu không nhớ nổi những thông số đã bị chỉnh sửa thì hãy tiến hành thì phục hồi lại Registry nguyên gốc

3. Lớp Registry trong .NET

regitry editor

–  Việc truy cập vào Registry trên .NET sẽ thông qua hai lớp Registry và RegistryKey thuộc namespace Microsoft.Win32.

using Microsoft.Win32;

–  Một thể hiện của lớp RegistryKey tượng trưng cho một registry key. Lớp RegistryKey cung cấp những hàm thành viên cốt lõi cho phép bạn làm việc với registry key.

– Lớp RegistryKey sẽ là lớp mà bạn sẽ dùng để làm việc với registry key. Ngược lại lớp Registry là lớp mà bạn chả bao giờ đụng đến. Vai trò của nó là cung cấp cho bạn những thể hiện RegistryKey tượng trưng cho key top-level những hive khác nhau để qua các thuộc tính static và có cả thảy 7 thuộc tính bao gồm ClassesRoot, CurrentConfig, CurrentUser, DynData, LocalMachine, PerformanceData, and Users. Chắc chắn bạn đã biết thuộc tính nào chỉ Registry hive nào Do đó muốn có một thể hiện của một RegistryKey tượng trưng cho key HKLM, bạn có thể viết:

RegistryKey hklm = Registry.LocalMachine;

 

– Nếu bạn muốn đọc một vài dữ liệu trên key HKLM\Software\Microsoft, bạn phải đi lấy qui chiếu về key như sau :

RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftware = hklm.OpenSubKey("Software");
RegistryKey hkMicrosoft = hkSoftware.OpenSubKey("Microsoft");

–  Một registry key được truy cập theo kiểu này chi cho phép bạn đọc mà thôi, Nếu bạn muốn có khả năng viết lên key (bao gồm viết lên trị của key, tạo hoặc gỡ bỏ cây con cái thuộc quyền), bạn phải sử dụng một OpenSubkey nhận thêm một thông số thứ hai thuộc kiểu bool cho biết quyền read-write đối với key. Ví dụ bạn muốn có khả năng thay đổi key Microsoft:

RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftware = hklm.OpenSubKey("Software");
RegistryKey hkMicrosoft = hkSoftware.OpenSubKey("Microsoft", true);

–  Phương thức  OpenSubKey() là một trong những hàm mà bạn triệu gọi nếu bạn chờ đợi key hiện hữu. Nếu nó không có thì nó sẽ trở về null preference. Còn nếu bạn muốn tạo một key mới bạn sẽ dùng CreateSubKey() (hàm này tự hoạt động cho quyền read write):

RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftware = hklm.OpenSubKey("Software");
RegistryKey hkMySoft = hkSoftware.CurrentUser.CreateSubKey("Thanh Cuong");

–  Một khi bạn đã có registry key bạn muốn đọc hoặc thay đổi, bạn có thể sử dụng các phương thức SetValue() hoặc GetValue() để đặt hoặc để lấy dữ liệu trên key như:

Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Thanh Cuong");
key.SetValue("Cuong", "University Of Information Technology!");
key.Close();
image

–  RegistryKey.GetValue() được định nghĩa trả về một quy chiếu đối tượng, nghĩa là trả về một quy chiếu string nếu nó thấy có kiểu dữ liệu REG_SZ, và int nếu phát hiện kiểu dữ liệu REG_DWORD:

string stringValue = (string)key.GetValue("MyStringValue"); int intValue = (int)key.GetValue("MyIntValue"); 

 

–  Lưu ý là sau khi xong việc bạn phải đóng registrykey của mình lại

key.Close();

 

– Các thành phần của RegistryKey bao gồm thuộc tính và phương thức sau:

image

Click vào đây để download project demo viết trên visual studio 2010

Advertisements

About thanhcuong1990

Handsome and talent!! ^^
This entry was posted in C#. Bookmark the permalink.

2 Responses to Đọc và ghi vào registry – Read and write to registry

  1. ledungsay says:

    em không biết nên comment chô nào nên viết vào đây vậy.em nhờ anh giúp đỡ em bài này ah.
    Cho tệp văn bản input.txt, mỗi dòng gồm hai số nguyên dương cách nhau ít nhất một ký tự trống.
    a. Viết hàm tính ước chung lớn nhất của 2 số nguyên dương a, b.
    b. Áp dụng hàm trên viết hàm tính bội chung nhỏ nhất của 2 số nguyên dương a,b

    c. Viết hàm main sử dụng hai hàm trên để tính ước chung lớn nhất và bội chung nhỏ nhất các cặp số đọc ra từ tệp input.txt. Kết quả ghi vào tệp văn bản output.txt theo dạng:
    a b ước chung lớn nhất bội chung nhỏ nhất

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s