مقدمة:
دائماً ما كان المبرمجون يجدون محرر التسجيل Windows REGISTRY مكاناً مناسب لتخزين معلومات وإعدادات برامجهم وذلك لأن الوصول للبيانات عبر الريجستري هو اسرع من الوصول للبيانات من الملفات وأيضاً لأنه مستودع آمن للبيانات في نظام التشغيل.
في هذا الدرس سنتحدث عن التعامل مع الريجستري Registry في C#.Net و VB.Net:
أساسيات محرر التسجيل Windows Registry:
بنية الريجستري منظمة بشكل هرمي. ويوجد في الريجستري خمسة مفاتيح معرفة مسبقاً تخزن تحتها جميع البيانات وكما ان هذه المفاتيح لا يمكن إعادة تسميتها او حذفها, ويندرج تحت كل مفتاح منها العديد من المفاتيح القرعية Subkeys إضافة إلى قيم البيانات Values. وإليكم وصف بسيط حول كل مفتاح منها:
المفتاح
|
وصفه
|
HKEY_CURRENT_USER
|
يحوي على إعدادات ومعلومات حول المستخدم الحالي للنظام, أي ان كل تفضيلات المستخدم الحالي تخزن هنا.
|
HKEY_USERS
|
يحوي على إعدادات ومعلومات حول جميع المستخدمين المسجلين في النظام.
|
HKEY_LOCAL_MACHINE
|
يحوي معلومات وإعدادات معينة حول جهاز الكمبيوتر بغض النظر عن المستخدم الحالي للنظام.
|
HKEY_CLASSES_ROOT
|
يحوي البيانات التي تربط بين أنواع الملفات والبرامج التي يمكن قراءة هذه الملفات بواسطتها, إضافة إلى البيانات الخاصة بكائنات COM.
|
HKEY_CURRENT_CONFIG
|
يحوي معلومات حول قطع الجهاز Hardware.
|
العمل مع محرر التسجيل في الفيجوال ستوديو VB.Net & C#.Net:
العمليات على الريجستري في .net يمكن القيام بها عن طريق كلاسين موجودين في مجال الاسماء Microsoft.Win32. الكلاسين هما Registry و RegistryKey حيث ان الكلاس Registry يزودنا بالمفاتيح الاساسية في الريجستري على شكل طرق (Methodes) عامة وللقراءة فقط وأهم الطرق التي يحويها:
ClassesRoot
|
يمكننا من الوصول إلى المفتاح HKEY_CLASSES_ROOT
|
CurrentConfig
|
يمكننا من الوصول إلى المفتاح HKEY_CURRENT_CONFIG
|
CurrentUser
|
يمكننا من الوصول إلى المفتاح HKEY_CURRENT_USER
|
LocalMachine
|
يمكننا من الوصول إلى المفتاح HKEY_LOCAL_MACHINE
|
Users
|
يمكننا من الوصول إلى المفتاح HKEY_USERS
|
كل واحدة من الطرق السابقة (Methodes) تزودنا بكائن Object من نوع الكلاس RegistryKey والذي تستخدم توابعه للوصول إلى المفاتيح الفرعية والبيانات التابعة للمفتاح الرئيسي. أهم ما يقدمه لنا هذا الكلاس RegistryKey:
الخاصية / التابع / الطريقة
|
العمل
|
SubKeyCount
|
ترجع عدد المفاتيح الفرعية الموجودة تحت المفتاح الحالي
|
ValueCount
|
ترجع عدد القيم الموجودة في المفتاح الحالي
|
Close
|
إغلاق المفتاح الحالي المفتوح وحفظ بياناته في حال تم تعديلها
|
CreateSubKey
|
إنشاء مفتاح فرعي أو فتح مفتاح موجود مسبقاً
|
DeleteSubKey
|
حذف المفتاح الفرعي في حال لم يكون يحوي مفاتيح فرعية
|
DeleteSubKeyTree
|
حذف المفتاح الفرعي وجميع المفاتيح الفرعية الموجودة تحته
|
DeleteValue
|
حذف قيمة محددة موجودة في المفتاح الحالي
|
GetSubKeyNames
|
ترجع مصفوفة من نوع String تحوي اسماء المفاتيح الفرعية
|
GetValue
|
ترجع بيانات القيمة
|
GetValueNames
|
ترجع مصفوفة من نوع String تحوي اسماء القيم الموجودة في المفتاح الحالي
|
OpenSubKey
|
فتح مفتاح فرعي
|
SetValue
|
إسناد بيانات قيمة ما
|
مثال عملي (كيفية التحكم في تفعيل وإلغاء تفعيل إدارة المهام):
العمل مع الريجستري من خلال VB.net & C# يقودنا إلى صيغة عامة في كتابة الكود وهي:
- فتح المفتاح الذي نريد العمل معه او مع القيمة والمفاتيح الفرعية التابعة له.
- إجراء العمليات المطلوبة.
- ثم إغلاق المفتاح او المفاتيح التي تم فتحها.
- كود معرفة هل إدارة المهام مفعلة أم لا:
RegistryKey hKey = Registry.CurrentUser.OpenSubKey(regpath,true);
if (hKey == null)
chkTaskManager.Checked = false;
else
{
string res = hKey.GetValue("DisableTaskMgr", "0").ToString();
hKey.Close();
if (res == "1")
chkTaskManager.Checked = true;
else
chkTaskManager.Checked = false;
}
Dim hKey As RegistryKey =
Registry.CurrentUser.OpenSubKey(regpath,True)
If hKey Is Nothing Then
chkTaskManager.Checked
= False
Else
Dim res As String = hKey.GetValue("DisableTaskMgr",
"0").ToString()
hKey.Close()
If res = "1"
Then
chkTaskManager.Checked = True
Else
chkTaskManager.Checked = False
End If
End If
من أجل التحكم في تفعيل إو إلغاء تفعيل إدارة المهام فإننا بحاجة إلى التعامل مع القيمة DisableTaskMgr الموجودة في المسار التالي:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
حيث إذا كانت هذا القيمة تساوي الواحد فإن إدارة المهام غير مفعلة والعكس صحيح.
لذلك قمنا بفتح المفتاح الذي يحوي القيمة عن طريق التابع OpenSubKey الخاص بالكائن hKey الذي هو من النوع RegistryKey وقمنا بفتح المفتاح للكتابة عن طريق تمرير القيمة true للبارميتر الثاني.
في حال كانت قيمة الكائن hKey تساوي null في C#.Net أو Nothing في VB.NET هذا يعني ان التابع فشل في فتح المفتاح المطلوب أي أنه غير موجود فهذا يعني ان القيمة التي سنفحصها غير موجودة أصلاً لذلك فإن إدارة المهام ستكون مفعلة لذلك نسند القيمة true لصندوق التحقق.
في حال النجاح في فتح المفتاح نقوم بقراءة القيمة DisableTaskMgr ووضعها في متحول ثم نقوم بإغلاق المفتاح بعد الانتهاء كي لا تحدث أخطاء ثم نقوم بإسناد قيمة إما true او false لصندوق التحقق حسب القيمة.
- كود التحكم في تقعيل إدارة المهام:
if (chkTaskManager.Checked)
{
RegistryKey hKey = Registry.CurrentUser.OpenSubKey(regpath,true);
if (hKey == null)
{
hKey = Registry.CurrentUser.OpenSubKey(regpath.Substring(0, regpath.LastIndexOf(@"\")), true);
hKey.CreateSubKey("System");
hKey.OpenSubKey(regpath, true);
hKey.SetValue("DisableTaskMgr", 1);
hKey.Close();
}
else
{
hKey.SetValue("DisableTaskMgr", 1);
hKey.Close();
}
}
else
{
RegistryKey hKey = Registry.CurrentUser.OpenSubKey(regpath, true);
hKey.DeleteValue("DisableTaskMgr");
hKey.Close();
}
If chkTaskManager.Checked Then
Dim hKey As RegistryKey =
Registry.CurrentUser.OpenSubKey(regpath,True)
If hKey Is Nothing Then
hKey =
Registry.CurrentUser.OpenSubKey(regpath.Substring(0, regpath.LastIndexOf("\")), True)
hKey.CreateSubKey("System")
hKey.OpenSubKey(regpath, True)
hKey.SetValue("DisableTaskMgr",
1)
hKey.Close()
Else
hKey.SetValue("DisableTaskMgr",
1)
hKey.Close()
End If
Else
Dim hKey As RegistryKey =
Registry.CurrentUser.OpenSubKey(regpath, True)
hKey.DeleteValue("DisableTaskMgr")
hKey.Close()
End If
عند تفعيل صندوق التحقق سنقوم بإلغاء تفعيل إدارة المهام لذلك كالعادة نقوم أولاً بفتح المفتاح المطلوب ثم يتم التحقق من أن المفتاح المطلوب هل موجود أما لا وفي حال كان المفتاح غير موجود فإننا سنقوم بإنشاءه من أجل إنشاء القيمة التي ستقوم بإيقاف إدارة المهام.
وكي نقوم بإنشاء المفتاح فإننا نفتح المفتاح الأعلى منه أي المفتاح:
HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Policies
حيث نقوم بإقتطاع جزء من السلسلة النصية التي تحمل مسار المفتاح لنحصل على مسار المفتاح السابق. بعد ذلك نقوم بإنشاء المفتاح System ثم نقوم بإنشاء القيمة DisableTaskMgr واسناد القيمة واحد لها من أجل إيقاف إدارة المهام.
أما في حال كان المفتاح موجوداً فإننا فقط فقوم بإنشاء القيمة DisableTaskMgr واسناد القيمة واحد لها.
أما القسم الثاني من الكود وهو لإعادة تفعيل إدارة المهام فإننا نقوم بحذف القيمة DisableTaskMgr وذلك بعد فتح المفتاح المطلوب وحذف القيمة ثم إغلاق المفتاح.
تنبيهات:
- من أجل الكتابة والقراءة من الريجستري تحتاج إلى صلاحيات آمان أي ان المستخدم الحالي الذي ينفذ الكود VB.Net أو C#.Net , إذا لم يكن يملك صلاحيات فإن تنفيذ كود سيؤدي إلى ظهور إعتراض SecurityException.
- محرر التسجيل جزء حساس جداً في نظام التشغيل لذلك يُفضل عمل نسخة احتياطية قبل التعامل مع الريجستري حيث ان اي ضرر يلحق بالريجستري سيؤدي إلى أخطاء وانهيار في النظام.
2 تعليقات
المعلومات ممتازه لكن العرض سئ بصراحه لم افهم شئ
ردارجو توضيح اكثر للاكواد المكتوبه
ردإرسال تعليق