متغيرات النظام (درس مترجم)

متغيرات النظام

قبل أن نبدأ:

هذا المقال عبارة عن ملخص عن متغيرات النظام الهدف منه هو إعطاء أكبر كمية ممكنة من المعلومات عن هذه المتغيرات و عن كيفية استعمالها في بيئة الـ windows .

بطبيعة الحال لا يمكن حصر كل هذا الموضوع في مقال واحد لكن نحاول قدر الإمكان توضيح الصورة للمبرمج فيما يخص هذه المتغيرات

ليس الهدف من المقال هو التشجيع على استعمال تقنية ربما تكون في طريق الاندثار لكن بغية تمكين المبرمج من تطوير برامج يمكنها أن تساير الموجود من الأنظمة المتواجدة

مقدمة:

متغيرات النظام و التي يعود ظهورها إلى الإصدارات الأولى من الـ windows تسمح بنقل المعلومة بين مختلف البرامج.
حاليا هذه المتغيرات بدأ استعمالها يقل بسبب تعويضها باستعمال registry . رغم ذلك ما زالت تستعمل في أنظمة التشغيل الحديثة.
متغيرات النظام هي عبارة عن متغيرات عامة variable globale و التي يستطيع أي برنامج أن يقوم بتغييرها حسب شروط محددة – سنتطرق إليها لاحقا-


يوفر Windows  جملة من متغيرات النظام و التي تسمح للبرامج بمعرفة إعدادات النظام

على سبيل المثال المتغيران TMP و TEMP يخبران عن مسار مجلد الملفات المؤقتة الخاصة بالـ windows
كما أن المتغير PATH يخبر الـ windows إلى أين يجب أن يذهب لكي يجد البرامج التي نشغلها من موجهة الـ dos أو حتى مكتبات dll اللازمة لتشغيل البرامج
لكي يستطيع أكثر من برنامج تقاسم متغير ما على شكل إحدى متغيرات النظام يجب فقط أن يعرف كل برنامج اسم المتغير لكي يستطيع معرفة قيمته . إذا نظام تقاسم المتغيرات نظام سهل خالي من التعقيدات
نضرب مثلا لتوضيح الصورة. افرض وجود برنامجين يتعاملان مع نفس الملف بحيث أن البرنامج الأول يقوم بكتابة معلومات في الملف و البرنامج الثاني يقوم بقراءة هذه المعلومات و إظهارها على الشاشة.
لتحقيق هذا الهدف من الممكن إنشاء متغير و ليكن اسمه على سبيل المثال DataPath و تخزين مسار الملف فيه. في هذه الحالة لا يهم مكان وجود البرنامجين في القرص. إذ أنه يكفي لكلا البرنامجين قراءة المتغير DataPath و معرفة مسار الملف و من ثم التعامل معه.
أضف إلى ذلك إمكانية تحويل الملف من مكان إلى آخر دون الحاجة إلى إخطار أو تعديل البرنامجين حيث نقوم بتغيير قيمة المتغير فقط.

متغيرات النظام الخاصة بالـ windows :

هناك جملة من المتغيرات التي توفرها بيئة الـ windows و إليكم مجموعة منها مرتبة حسب إصدار النظام المستعمل. هذه المتغيرات لا تتأثر بطريقة كتابة المتغير فـ DATAPATH و datapath يمثلان نفس المتغير.

/ 1 المتغيرات المشتركة بين معظم إصدارات الـ windows:

TMP وTEMP :مجلد الملفات المؤقتة الخاص بالـ  windows
Windir : المجلد الخاص بـ  windows
COMSPEC : اسم موجهة الـ dos مع ذكر المسار كاملا
PATH : مسارات مفصولة بـ ; تبين المجلدات التي ينبغي على النظام البحث عن البرامج و مكتبات الـ dll

2 /المتغيرات المتوفرة في windows nt و windows 2000

COMPUTERNAME: اسم الجهاز
HOMEDRIVE : القرص الذي يحتوي مجلدات النظام
HOMEPATH : مجلد المستخدم الحالي
NUMBER_OF_PROCESSORS : عدد المعالجات processor المتوفرة على الجهاز
OS : اسم نظام التشغيل
PATHEXT : قائمة امتدادات الملفات القابلة للتشغيل (execution) مثل ملفات exe او com
SystemDrive : القرص الذي يحتوي مجلدات النظام
SystemRoot : مجلد النظام
USERNAME : اسم المستخدم
USERPROFILE : مسار الـ profile المستخدم الحالي

و المزيد

LOGONSERVER
Os2LibPath
PROCESSOR_ARCHITECTURE
PROCESSOR_IDENTIFIER
PROCESSOR_LEVEL
PROCESSOR_REVISION
USERDOMAIN

لمعرفة محتوى كل متغير :

– اذهب إلى الـ DOS
– اكتب الأمر echo متبوعا باسم المتغير بين %%

مثال:
Echo % USERNAME%
تظهر اسم المستخدم الحالي

3 /المتغيرات المتوفرة في windows 2000

ALLUSERSPROFILE : مسار Profile العام ( لجميع المستخدمين)
APPDATA:  مسار المجلد المخصص لبيانات البرامج الخاصة بالمستعمل الحالي
CommonProgramFiles : مجلد البرامج العامة (جميع المستخدمين)
ProgramFiles : مجلد البرامج

هيئة التخزين

متغيرات النظام مخزنة على هيئة environment block داخل كل PROCESS قيد التنفيذ .
في Windows يحتوي إذا كل process على data block والذي يحتوي على مجموعة من المتغيرات و قيمها.
هذا الـ block متكون من array char (جدول حروف) مثل التي تستعملها لغة c (و بالتالي يوجد character خاص بنهاية الجدول ).
هذا الـ block يكون على الشكل التالي:
TheVaraible=TheValue
و ينتهي بعلامة نهاية الجدول

مثال:
TEMP=%USERPROFILE%\Local Settings\Temp#0TMP=%USERPROFILE%\Local Settings\Temp#0#0

ملاحظة:  #0 يمثل هنا الكود ascii الممثل للـ character 0

في الحالة العامة الـ process الابن يرث data block الخاص بأبيه
كما أنه يمكن إعطاء للـ porcess الابن data block آخر غير الذي يرثه من أبيه و ذلك بإنشائه و تمرير عنوانه إلى الدالة CreateProcess.
هذه الآلية تسمح لأي برنامج كان بالوصول إلى هذه المتغيرات دون أي أخطار أو أخطاء ما دام أن كل process يعمل على نسخته الخاصة من هذه المتغيرات
لفهم هذه الآلية جيدا ليس هناك أفضل من مثال توضيحي

– افتح نافذة للـ  dos   (strat>run> cmd)
– سنستعمل الأمر set الذي يسمح بإظهار و تغيير متغيرات النظام
– اكتب SET MyName=DJUG
– لقد قمنا للتو بإنشاء متغير جديد يحمل اسم MyName و يحمل القيمة Djug
– الآن اكتب  set و لاحظ وجود هذا المتغير في جملة ما يظهر على الشاشة
– أو أنه يمكنك التحقق من ذلك بكتابة ECHO %MyName%”
– و الآن من دون أن تغلق نافذة الـ dos قم بفتح أخرى
– اكتب الأمر set لمعرفة المتغيرات المتوفرة
– يمكنك أن تلاحظ غياب المتغير MyName من هذه القائمة و يعود سبب ذلك إلى أن النافذة الجديدة لم ترث متغيراتها من النافذة الأولى و إنا ورثت متغيران النظام الأصلية
– أغلق هذه النافذة الآن (الثانية(
– ارجع إلى النافذة الأولى و قم بإنشاء نافذة عن طريق الأمر start
– و الآن استعمل الأمر set للتأكد من وجود المتغير MyName
– يمكنك الآن أن تلاحظ و بوضوح كيف أن هذه النافذة قد ورثت المتغيرات من النافذة الأولى.

تغيير قيم متغيرات النظام:

مكان حفظ متغيرات النظام في الـ registry
متغيرات النظام محفوظة داخل الـ registry على هيئة قيم حيث أن اسم القيمة هو اسم المتغير و محتوى القيمة و هو قيمة المتغير
محتوى هذه القيم يكون على هيئة REG_SZ أو REG_EXPAND_SZ في حالة ما إذا كان المتغير الحالي يحتوي اسم متغير آخر في قيمته مثلما هو الحال مع TEMP حيث أن قيمتها هي( %USERPROFILE%\Local Settings\Temp )

المتغيرات الخاصة بـالمستخدم الحالي محفوظة في
HKEY_CURRENT_USER\Environment
المتغيرات الخاصة بالنظام (بصفة عامة)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

يبقى مكان ثالث لتخزين المتغيرات وهو
HKEY_USERS\.DEFAULT\Environment
هذا المتغير لا يحفظ المتغيرات التي يجب إرفاقها بكل مستخدم جديد (كما قد توحي كلمة DEFAULT بذلك) و لكن المتغيرات التي يستعملها النظام حين لا يكون أي مستخدم متصلا (أي قبل مرحلة الاتصال)

التعامل مع متغيرات النظام برمجيا:

توفر الـ API الخاصة بالـ Windows بعض الدوال التي تسمح بالتعامل مع متغيرات النظام. هذه الدوال مصممة خصيصا للتعامل مع متغيرات النظام للبيئة الحالية الخاصة بالـ  process  قيد التشغيل.التغيير العام لهذه المتغيرات لا يتم إلا عن طريق تغيير هذه القيم في الـ registry.

GetEnvironmentVariable :  هذه الدالة تسمح بالحصول على قيمة إحدى متغيرات النظام الخاصة بالـ process  الحالي في حالة وجود هذا المتغير ، غير ذلك فإن الدالة ترجع القيمة 0 و الدالة GetLastError تعطينا القيمة ERROR_ENVVAR_NOT_FOUND.

SetEnvironmentVariable : يتمثل دور هذه الدالة في إضافة ، تغيير ،أو حذف إحدى متغيرات النظام (طبعا الخاصة بالـ process  قيد التشغيل). إذا كانت القيمة المعطاة للدالة هي null فإن المتغير يحذف و في الحالات الأخرى فإن المتغير يعطى هذه القيمة (في حالة ما إذا كان موجودا ) أو ينشأ و يعطى هذه القيمة إذا لم يكن موجودا من قبل.

يجب التنويه إلى أن هذه التغييرات (إن حصلت) ليس لها وجود إلى في بيئة الـ process الحالي أو في بيئة الـ process التي أنشأت عن طريق هذا الأخير (توارث القيم)

GetEnvironmentStrings : دور هذه الدالة يتمثل في الحصول على كل متغيرات النظام للـ process الحالي

تعطى النتيجة على هيئة جدول للـ string (string على الهيئة المعروفة في لغة c أي أنه ينتهي بـ caracter خاص بنهاية الـ string) هذا الجدول بدوره ينتهي بهذا الـ caracter .
القيمة التي ترجعها هذه الدالة هي عنوان المكان المخصص في الذاكرة لحفظ الجدول المذكور فوق
بطبيعة الحال لا يمكن التغيير المباشر على هذا المكان من الذاكرة ( يجب استعمال الدالة SetEnvironmentVariable.)

FreeEnvironmentStrings :  هذه الدالة تقوم بـتسريح المكان المحجوز في الذاكرة عن طريق الدالةGetEnvironmentStrings

CreateProcess :  كما أنه يمكن بواسطة هذه الدالة إنشاء process و إعطائه متغيرات النظام التي نريدها له (ليس التي يرثها عن الـ porcess الأب) و ذلك عن طريق إعطاء الـ parameter lpEnvironment عنوان المكان في الذاكرة الذي وضعنا فيه هذه المتغيرات (في حالة غياب هذا الـ parameter فإن الدالة CreateProcess تأخذ متغيرات نظام الـ process الحالي.
WM_SETTINGCHANGE : يسمح هذا الـ message بإعلام جميع الـ process  قيد التشغيل بالعديد من التغيرات الحاصلة (و الذي يهمنا هنا هو متغيرات النظام ) .حيث أنه يجب إرساله باستعمال الدالة SendMessageTimeOut أو BroadcastSystemMessage أين يجب أن يحتوي الـ parameter LParam القيمة النصية ‘Environment’.

استعمال الـ time out تسمح بانتظار “وصل استلام” من طرف البرامج الحاصلة على هذه الـ Message دون أن نوقف النظام في حالة وجود برامج لا تتعامل مع هذا الـ Message

عنوان المقال الأصلي:
Présentation, description et utilisation des variables d’environnement sous Windows.
رابط المقال الأصلي:
http://castelain.developpez.com/articles/V…sEnvironnement/
الترجمة  :  Djug

لتحميل الدرس  على هيئة

PDF

http://www.4shared.com/file/137573243/860f2fa3/Environnement_Variables.html