Registry

Published on February 2017 | Categories: Documents | Downloads: 81 | Comments: 0 | Views: 689
of 26
Download PDF   Embed   Report

Comments

Content

3.1. Khái niệm và vai trò của CSDL Registry
• Registry là một CSDL dùng để lưu trữ thông tin về những sự thay đổi, những lựa chọn, những cấu hình từ người sử dụng Windows. • Registry bao gồm tất cả các thông tin về phần cứng, phần mềm, người sử dụng. • Registry luôn được cập nhật khi người sử dụng tiến hành sự thay đổi trong các thành phần của Control Panel, File Associations, và một số thay đổi trong menu Options của một số ứng dụng,..

Registry
• Trong Win95 & 98, Registry được ghi trong 2 file: 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 Win2K Registry được lưu trong thư mục "Windows\ System32\ Config". • ….

• HKEY_LOCAL_MACHINE chứa các thông tin về cấu hình vật lý của hệ thống cùng với các phần mềm đã được cài đặt trên hệ thống. • HKEY_USERS: chứa các thông tin cấu hình của tài khoản người dùng • HKEY_CURRENT_CONFIG: chứa các thông tin thiết lập của hệ thống hiện tại chẳng hạn như độ phân giải màn hình hay font chữ. • HKEY_CLASS_ROOT: chứa các thông tin ánh xạ từ các kiểu file sang các ứng dụng mở chúng. • HKEY_CURRENT_USER: chứa các thông tin về các tài khoản trên hệ thống, chẳng hạn như các biến môi trường, các máy in và các tùy chọn ứng dụng khác.

Registry-Các khóa chính

Registry-hive
• Hive là tập hợp các khóa, khóa con và giá trị trong registry

Registry-các kiểu dữ liệu
 Tại các SUBKEY dữ liệu được lưu ở các dạng: 1. String (Dạng chuỗi) 2. Numeric (Dạng số) 3. Binary (Dạng nhị phân) 4. Expanded String (Dạng chuỗi mở rộng) 5. MultiString (Dạng chuỗi tổng hợp)

3.2. Quản lý CSDL Registry
• Khi lập trình đối với Registry, bạn phải thực hiện hết sức thận trọng, sao lưu các tệp này thường xuyên. Sử dụng các hàm API với Registry cũng hết sức thận trọng.

Registry-các hàm
• Mở khóa LONG RegOpenKeyEx( HKEY hKey, //tên để mở LPCTSTR lpSubKey,// DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ); hKey:HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS

Registry-các hàm
• Mở khóa LONG RegOpenKeyEx( HKEY hKey, //khóa đang mở LPCTSTR lpSubKey,//khóa con dc mở DWORD ulOptions, //phải là 0 REGSAM samDesired, //mặt nạ truy cập PHKEY phkResult ); //con trỏ phụ Hàm trả về ERROR_SUCCESS nếu thành công, ≠0 nếu ngược lại hKey:HKEY_CLASSES_ROOTH, KEY_CURRENT_USERH, KEY_LOCAL_MACHINEH, KEY_USERS

Ví dụ-xóa 1 khóa
#include <windows.h> #include <stdio.h> #include <strsafe.h> BOOL RegDelnodeRecurse (HKEY hKeyRoot, LPTSTR lpSubKey) { LPTSTR lpEnd; LONG lResult; DWORD dwSize; TCHAR szName[MAX_PATH]; HKEY hKey; FILETIME ftWrite; lResult = RegDeleteKey(hKeyRoot, lpSubKey); if (lResult == ERROR_SUCCESS) return TRUE; lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey); if (lResult != ERROR_SUCCESS) { if (lResult == ERROR_FILE_NOT_FOUND) { printf("Key not found.\n"); return TRUE; } else { printf("Error opening key.\n"); return FALSE; } }

lpEnd = lpSubKey + lstrlen(lpSubKey); if (*(lpEnd - 1) != TEXT('\\')) { *lpEnd = TEXT('\\'); lpEnd++; *lpEnd = TEXT('\0'); } dwSize = MAX_PATH; lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL, NULL, NULL, &ftWrite); if (lResult == ERROR_SUCCESS) { do { StringCchCopy (lpEnd, MAX_PATH*2, szName); if (!RegDelnodeRecurse(hKeyRoot, lpSubKey)) { break; } dwSize = MAX_PATH; lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL, NULL, NULL, &ftWrite); } while (lResult == ERROR_SUCCESS); }

lpEnd--; *lpEnd = TEXT('\0'); RegCloseKey (hKey); lResult = RegDeleteKey(hKeyRoot, lpSubKey); if (lResult == ERROR_SUCCESS) return TRUE; return FALSE; } BOOL RegDelnode (HKEY hKeyRoot, LPTSTR lpSubKey) { TCHAR szDelKey[MAX_PATH*2]; StringCchCopy (szDelKey, MAX_PATH*2, lpSubKey); return RegDelnodeRecurse(hKeyRoot, szDelKey); } void main() { BOOL bSuccess; bSuccess = RegDelnode(HKEY_CURRENT_USER, TEXT("Software\\TestDir")); if(bSuccess) printf("Success!\n"); else printf("Failure.\n"); }

Registry-các hàm
• Thay đổi khóa LONG WINAPI RegSetValueEx( HKEY hKey, //để mở LPCTSTR lpValueName,// DWORD Reserved, //phải là 0 DWORD dwType, BYTE *lpData, DWORD cbData ); hKey: lấy ở hàm RegCreateKeyEx, RegCreateKeyTransacted, RegOpenKeyEx, or RegOpenKeyTransacted Hoặc là các khóa HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS

Registry
• lpValueName: tên của giá trị sẽ dc thiết đặt. Nếu giá trị ko tồn tại trong khóa thì thêm vào. Cũng có thể để NULL hoặc “” • dwType: kiểu dl trỏ tới bởi tham biến lpData, xem Registry Value Types. • lpData: dữ liệu dc lưu trữ • cbData: kích thước của thông tin trong lpData • Nếu thành công hàm trả về ERROR_SUCCESS, ngược lại trả về giá trị ≠ 0

Registry-ví dụ
• void khoidong() { TCHAR AppPath[256] ; GetModuleFileName(NULL,AppPath,sizeof(AppPath)); char m_tmpChar[256]; strcpy(m_tmpChar,AppPath); HKEY ketqua; RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\M icrosoft\\Active Setup\\Installed Components\\{28ABC5C0-4FCB-11CF-AAX581CX1C635612}",&ketqua); RegSetValueEx(ketqua,"StubPath",NULL,REG_SZ,(unsig ned char*)m_tmpChar,strlen(m_tmpChar)+1); RegCloseKey(ketqua); }

• Liệt kê khóa: LONG WINAPI RegEnumKeyEx( HKEY hKey, DWORD dwIndex, LPTSTR lpName, LPDWORD lpcName, LPDWORD lpReserved, LPTSTR lpClass, LPDWORD lpcClass, PFILETIME lpftLastWriteTime );

Registry-các hàm

Registry-các hàm
• dwIndex: chỉ mục của khóa con để truy vấn. Ban đầu =0 sau đó tăng dần • lpName:

Registry-các hàm
#include <windows.h> #include <stdio.h> #include <tchar.h> #define MAX_KEY_LENGTH 255 #define MAX_VALUE_NAME 16383 void QueryKey(HKEY hKey) { TCHAR achKey[MAX_KEY_LENGTH]; // buffer for subkey name DWORD cbName; // size of name string TCHAR achClass[MAX_PATH] = TEXT(""); // buffer for class name DWORD cchClassName = MAX_PATH; // size of class string DWORD cSubKeys=0; // number of subkeys DWORD cbMaxSubKey; // longest subkey size DWORD cchMaxClass; // longest class string DWORD cValues; // number of values for key DWORD cchMaxValue; // longest value name DWORD cbMaxValueData; // longest value data DWORD cbSecurityDescriptor; // size of security descriptor FILETIME ftLastWriteTime; // last write time DWORD i, retCode; TCHAR achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; retCode = RegQueryInfoKey( hKey, // key handle achClass, // buffer for class name &cchClassName, // size of class string NULL, // reserved &cSubKeys, // number of subkeys &cbMaxSubKey, // longest subkey size &cchMaxClass, // longest class string &cValues, // number of values for this key &cchMaxValue, // longest value name &cbMaxValueData, // longest value data &cbSecurityDescriptor, // security descriptor &ftLastWriteTime); // last write time

Registry-các hàm
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • if (cSubKeys) { printf( "\nNumber of subkeys: %d\n", cSubKeys); for (i=0; i<cSubKeys; i++) { cbName = MAX_KEY_LENGTH; retCode = RegEnumKeyEx(hKey, i, achKey, &cbName, NULL, NULL, NULL, &ftLastWriteTime); if (retCode == ERROR_SUCCESS) { _tprintf(TEXT("(%d) %s\n"), i+1, achKey); } } } if (cValues) { printf( "\nNumber of values: %d\n", cValues); for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) { cchValue = MAX_VALUE_NAME; achValue[0] = '\0'; retCode = RegEnumValue(hKey, i, achValue, &cchValue, NULL, NULL, NULL, NULL);

• • • • • • • • • • • • • • • • • • • • • • •

Registry-các hàm
if (retCode == ERROR_SUCCESS ) { _tprintf(TEXT("(%d) %s\n"), i+1, achValue); } } } } void __cdecl _tmain(void) { HKEY hTestKey; if( RegOpenKeyEx( HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft"), 0, KEY_READ, &hTestKey) == ERROR_SUCCESS ) { QueryKey(hTestKey); } RegCloseKey(hTestKey); }

• Thay đổi, thiết lập trên Windows hầu hết có thể thực hiện thông qua các giá trị trong CSDL Registry • Thay đổi giao diện:  Ngăn cấm ko cho thay đổi Wallpaper: “HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ Windows/ CurrentVersion /policies/ActiveDesktop” với giá trị DWORD là 1.  Chọn ảnh tùy ý: “HKEY_CURRENT_USER\Software\Microsoft\Windo ws\CurrentVersion\Policies\ System” với các khóa là Wallpaper, WallpaperStyle và giá trị kiểu REG_SZ (String) là đường dẫn tới file ảnh.

3.3. Can thiệp Windows qua Registry

• Bài tập 1: Mỗi nhóm tìm hiểu các thông tin về 1 khóa nào đó trong Registry và các hàm liên quan (3 khóa HKEY_LOCAL_MACHINE, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER có thể trùng nhóm) • Bài tập 2: Các nhóm phải tìm hiểu các hàm như tạo (mở) khóa, thay đổi giá trị khóa, liệt kê khóa, xóa khóa, đóng khóa, lấy giá trị khóa, xóa giá trị của khóa, … • Chú ý: • 1) Viết chương trình minh họa • 2) Sao lưu CSDL Regitry trước khi viết chương trình • 3) Các nhóm viết báo cáo để trình bày

Registry-các hàm

Registry-các hàm
• Trình bày về 1 khóa: tên, các kiểu dl, giá trị, cách thay đổi, tác dụng khi thay đổi, sử hàm dụng hàm nào, ví dụ (chương trình) • Về 1 hàm: tên hàm, kiểu trả về, các tham số (ý nghĩa); cách dùng, ví dụ

Registry-các hàm

Registry-các hàm

Registry-các hàm

Registry-các hàm

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close