SCM هي عملية نظام خاصة ضمن أنظمة التشغيل Windows NT. وهي مسؤولة عن بدء وإيقاف وإدارة عمليات خدمة Windows.
يقع الملف القابل للتنفيذ لـ SCM في %SystemRoot%\System32\services.exe، ومهمته الرئيسية هي بدء تشغيل جميع الخدمات التي تم تكوينها للبدء تلقائيًا. عند بدء تشغيل النظام، ستبدأ عملية Wininit تشغيل SCM مبكرًا وتبدأ سلسلة من مهام التهيئة.
أثناء عملية بدء التشغيل، يقوم SCM أولاً بقراءة المعلومات المتعلقة بالخدمة من السجل. يتضمن هذا إدخالين رئيسيين في التسجيل:
<أول>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder\List - يحتوي على أسماء وترتيب بدء تشغيل مجموعات الخدمة. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - قاعدة البيانات الفعلية للخدمات وبرامج تشغيل الأجهزة. تساعد هذه المعلومات إدارة سلسلة التوريد على تحديد ترتيب بدء تشغيل كل خدمة وترابطاتها. يتحقق SCM أيضًا مما إذا كانت برامج تشغيل الأجهزة التي يجب بدء تشغيلها أثناء عملية التمهيد قد تم تحميلها بنجاح، ويخزن برامج التشغيل الفاشلة في قائمة تسمى ScFailedDrivers.
بعد معالجة جميع خدمات التشغيل التلقائي غير المتأخرة، سيبدأ SCM في تحميل خدمات التشغيل التلقائي المتأخرة، وهي ميزة جديدة تم تقديمها منذ نظام التشغيل Windows Vista لتسريع بدء تشغيل النظام. عادةً، يتم تهيئة هذه الخدمات المتأخرة بعد حوالي 120 ثانية من بدء تشغيل النظام.عند معالجة كل خدمة يتم بدء تشغيلها تلقائيًا، سيأخذ SCM أيضًا في الاعتبار تبعيات ترتيب التحميل لتجنب حدوث تبعيات دائرية.
لكل خدمة يتم بدء تشغيلها، يقوم SCM باستدعاء الدالة ScStartService() للتحقق من أن الحساب الذي يتم تشغيل العملية تحته يتطابق مع الحساب المحدد بواسطة الخدمة. أثناء هذه العملية، إذا لم تكن الخدمة قيد التشغيل ضمن حساب النظام، فسوف يقوم SCM باستدعاء دالة LSASS LogonUserEx() للحصول على معلومات تسجيل دخول المستخدم الضرورية. يتم تخزين هذه المعلومات في مفتاح التسجيل HKLM\SECURITY\Policy\Secrets\، ويمكن فقط للخدمات التي تتمتع بإمكانية الوصول الكامل الحصول على كلمات المرور "السرية" هذه.
يتم وضع عملية الخدمة في حالة معلقة عند إنشائها، ولن يتم استئناف تنفيذها حتى يتم إنشاء اتصال خط الأنابيب.
بمجرد بدء عملية الخدمة بنجاح، سيقوم SCM بإنشاء قناة اتصال مع عملية الخدمة عن طريق إنشاء أنبوب مسمى. تنضم عملية الخدمة إلى هذه القناة عن طريق استدعاء الدالة StartServiceCtrlDispatcher()، ثم يقوم SCM بإرسال أمر "بدء" إلى الخدمة.
إن وجود خدمة بدء التشغيل التلقائي المتأخر يحسن بشكل كبير من توازن بدء تشغيل النظام. على الرغم من أن هذه الخدمات لا تختلف من الناحية الفنية كثيرًا عن خدمات التشغيل التلقائي العادية، إلا أنها مصممة ليتم تشغيلها في مراحل مختلفة من بدء تشغيل النظام لضمان التشغيل السلس للنظام.
يقوم SCM أيضًا بإدارة برامج تشغيل الأجهزة. يتم تمييز أنواع الخدمات لهذه الخدمات باسم SERVICE_KERNEL_DRIVER أو SERVICE_FILE_SYSTEM_DRIVER في السجل. في هذه الحالات، يقوم SCM باستدعاء الدالة ScLoadDeviceDriver() لتحميل برنامج التشغيل المقابل في النظام، وهو ما يتطلب عادةً استدعاء استدعاء النظام NtLoadDriver.
يمكن لـ SCM أيضًا إرسال رسائل إلى تطبيقات واجهة المستخدم الرسومية مثل Windows Explorer لإعلامها بالتغييرات في اتصالات أحرف محرك الشبكة.
باختصار، يلعب مدير التحكم في الخدمة في نظام Windows دورًا لا غنى عنه في عملية بدء تشغيل النظام. فهو يقوم بتحميل الخدمات وبرامج تشغيل الأجهزة الضرورية بطريقة فعّالة للحفاظ على الاستجابة السريعة والتشغيل المستقر للنظام الإجمالي. عندما نستخدم هذه التقنيات، هل أخذنا في الاعتبار مبادئ التشغيل والتحديات التقنية التي تكمن وراءها؟