حول الجزء 3 من عمل الكمبيوتر الشخصي: من التشغيل إلى التحميل الكامل لنظام Windows 10

نستمر في فهم كيفية عمل الكمبيوتر الشخصي على مثال لوحة المفاتيح ونظام التشغيل Windows 10. في هذه المقالة ، سنتحدث عن كيفية دمج البرامج والأجهزة.



بدء النظام



يتم إيقاف تشغيل الكمبيوتر تمامًا عند فصله عن الطاقة وتفريغ المكثفات الموجودة على اللوحة الأم. قبل عصر الهواتف الذكية ، غالبًا ما تتعطل الهواتف المحمولة وإذا لم تعالج إعادة التشغيل المشكلة ، فحينئذٍ كان عليك إخراج البطارية والانتظار لمدة 10 ثوانٍ ، لأنه تمت إعادة تعيين حالة برنامج نظام التشغيل ، بينما ظلت الرقائق الموجودة على اللوحة الأم وأجهزة التحكم في الجهاز نشطة ، مع الحفاظ على الحالة ، وبرامج تشغيل نظام التشغيل لهم فقط إعادة الاتصال. 10 ثوانٍ - وقت تفريغ المكثفات ، تتم إعادة ضبط حالة الرقائق فقط بعد الإغلاق الكامل.

إذا كان الكمبيوتر متصلاً بمأخذ أو بطارية ، فسيكون في وضع الاستعداد ، مما يعني أنه يتم توفير جهد صغير (5 فولت) عبر ناقل الطاقة الذي يتم من خلاله تشغيل بعض الشرائح الموجودة على اللوحة الأم. على الأقل هذا هو وحدة تحكم النظامهو في الأساس جهاز كمبيوتر صغير يدير جهاز كمبيوتر كبير. بعد تلقيه إشعارًا بشأن الضغط على زر الطاقة ، يطلب من مزود الطاقة / البطارية توفير المزيد من الجهد ثم تهيئة مجموعة الشرائح بالكامل ، بما في ذلك المعالج. تتضمن عملية التهيئة نقل بيانات وكود البرامج الثابتة للوحة الأم ( BIOS / UEFI ) إلى ذاكرة الوصول العشوائي وإعداد وحدة المعالجة المركزية لتنفيذه.

إن التفكير في أن زر الطاقة هو مفتاح يوفر الكهرباء لوحدة المعالجة المركزية ويبدأ في تنفيذ البرامج الثابتة BIOS من عنوان معروف مسبقًا غير صحيح. ربما عملت أجهزة الكمبيوتر القديمة على هذا النحو. يوجد زر الطاقة على اللوحة الخاصة بها ، جنبًا إلى جنب مع مصابيح LED الخاصة بالحالة ومتصل باللوحة الأم من خلال موصل خاص. تُظهر الصورة أدناه جهات الاتصال لزر الطاقة ، وزر إعادة التعيين ، بالإضافة إلى مصابيح LED مع حالة الطاقة وقراءة القرص الصلب. يتم ترجمة الضغط على زر الطاقة إلى إشارة إلى جهات اتصال اللوحة الأم ، حيث تصل إلى وحدة تحكم النظام.





دبابيس على اللوحة الأم لتوصيل زر الطاقة ومصابيح LED الخاصة بحالة الطاقة والقرص الصلب ومكبرات الصوت.





اللوحة الأم للكمبيوتر المحمول مع زر الطاقة ومصباح LED للحالة تتمتع



وحدة التحكم في النظام بصلاحيات هائلة - لتشغيل الكمبيوتر وإيقاف تشغيله ، وتنفيذ التعليمات البرمجية في وضع kernel. بالإضافة إلى ذلك ، قد تكون هناك شرائح أخرى ذات قدرات مماثلة ، مثل Intel Management Engine أو AMD Secure Technology (جزء من وحدة المعالجة المركزية) ، والتي تعمل أيضًا عند "إيقاف تشغيل" الكمبيوتر. تحتوي شريحة Intel ME على وحدة المعالجة المركزية x86 التي تعمل بنظام التشغيل MINIX 3 . ما يمكنه فعله:

  1. قم بتشغيل وإيقاف تشغيل الكمبيوتر ، أي تنفيذ البرامج مع إمكانية الوصول إلى جميع أجهزة الكمبيوتر والأجهزة الطرفية والشبكات.
  2. تجاوز قيود جدار الحماية.
  3. شاهد جميع البيانات في وحدة المعالجة المركزية وذاكرة الوصول العشوائي ، والتي تتيح الوصول إلى الملفات المحمية بكلمة مرور.
  4. سرقة مفاتيح التشفير والوصول إلى كلمات المرور
  5. سجل ضربات المفاتيح وحركات الماوس
  6. شاهد ما يتم عرضه على الشاشة
  7. لا يمكن اكتشاف الشفرة الضارة في Intel ME بواسطة برنامج مكافحة الفيروسات ، لأنه لا يمكن الوصول إلى هذا المستوى المنخفض
  8. وبالطبع ، أرسل البيانات سرًا عبر الشبكة باستخدام مكدسك للعمل مع الشبكة.


وهذا يثير قضايا أمنية خطيرة حيث يمكن اختراقها أو استخدامها لأغراض التجسس.



. (Nvidia 2070 S) , , 600W, ~500W. – 650W . , , – . , . – , ~$300. , . , (PS_ON) (COM). .



ابحث عن أداة تحميل نظام التشغيل



هناك نوعان من البرامج الثابتة للوحة الأم - BIOS (نظام إخراج الإدخال الأساسي) على الأجهزة القديمة و UEFI (واجهة البرامج الثابتة القابلة للتوسيع الموحدة) على الأجهزة الأحدث. يدعم Windows 10 كلاً من الاختلافات بينهما ويلخصها. من الأصح استدعاء UEFI على نظام التشغيل أكثر من البرامج الثابتة ، لأنه يوفر المزيد من الميزات ، على سبيل المثال ، واجهة رسومية غنية بدلاً من واجهة نصية ، ووجود الماوس ، والمزيد من الذاكرة المتاحة ، ونموذج أمان محسن والتحقق من صحة ملفات نظام التشغيل ، والتفاعل مع الأجهزة عبر API ، بدلاً من المقاطعات كما في BIOS.





نموذج لشاشة BIOS.



يتم تخزين برنامج BIOS على شريحة منفصلة متصلة بالجسر الجنوبي. يمكن الحصول على هذه الشريحة وإعادة تحميلها باستخدام برنامج جديد ، فهي في الواقع مجرد حامل ذاكرة ، وليست حاسوبًا صغيرًا مستقلاً.





يتم تخزين إعدادات BIOS (وقت النظام ، على سبيل المثال) على شريحة أخرى ، والتي توجد عادةً بالقرب من بطارية مستديرة ، وهي في الواقع بطارية ليثيوم يعاد شحنها أثناء تشغيل الكمبيوتر. يطلق عليه CMOS ، وهو يعني أشباه موصلات أكسيد المعادن التكميلية ، وبالروسية ببساطة - CMOS ، وهو هيكل مكمل لأكسيد المعادن وأشباه الموصلات .





بادئ ذي بدء ، يقوم برنامج BIOS بفحص الأنظمة الفرعية ، وهذا الإجراء يسمى POST - Power On Self Test. يمكن اختصار الاختبار أو إكماله ، ويتم ضبطه في إعدادات BIOS. للاقتباس من ويكيبيديا ، ما تتضمنه هذه الاختبارات:

اختبار مختصر يتضمن:

  1. التحقق من سلامة برامج BIOS في ROM باستخدام المجموع الاختباري.
  2. اكتشاف وتهيئة وحدات التحكم الرئيسية ونواقل النظام والأجهزة المتصلة (مهايئ الرسومات ووحدات التحكم في المحرك وما إلى ذلك) ، بالإضافة إلى تنفيذ البرامج المضمنة في BIOS للأجهزة وضمان التهيئة الذاتية لها.
  3. تحديد حجم الذاكرة العشوائية واختبار المقطع الاول (64 كيلو بايت).


اللوائح الكاملة لـ POST:

  1. فحص جميع سجلات المعالج ؛
  2. التحقق من المجموع الاختباري للذاكرة ROM ؛
  3. التحقق من مؤقت النظام ومنفذ الإشارات الصوتية (لأجهزة الكمبيوتر IBM PC - IC i8253 أو ما يعادلها) ؛
  4. اختبار تحكم الوصول المباشر للذاكرة ؛
  5. اختبار إعادة توليد ذاكرة الوصول العشوائي ؛
  6. اختبار منطقة ذاكرة الوصول العشوائي السفلية لإسقاط البرامج المقيمة في BIOS ؛
  7. تحميل برامج المقيمين ؛
  8. اختبار محول الرسومات القياسي (VGA أو PCI-E) ؛
  9. اختبار ذاكرة الوصول العشوائي
  10. اختبار أجهزة الإدخال الرئيسية (وليس المتلاعبين) ؛
  11. اختبار CMOS
  12. اختبار منافذ LPT / COM الرئيسية ؛
  13. اختبار محركات الأقراص المرنة (محركات الأقراص المرنة) ؛
  14. اختبار محركات الأقراص الصلبة (HDD) ؛
  15. التشخيص الذاتي للأنظمة الفرعية الوظيفية لـ BIOS ؛
  16. نقل التحكم إلى محمل الإقلاع.


قد تكشف نتائج هذا الاختبار عن عطل ، على سبيل المثال ، بطاقة فيديو أو لوحة مفاتيح لا تعمل. نظرًا لأن شاشة الشاشة قد لا تعمل ، يتم الإبلاغ عن نتائج الاختبار على شكل سلسلة من الأصوات ذات الارتفاعات المختلفة. ما الذي تعنيه بالضبط يجب أن ينظر إليه في وثائق اللوحة الأم. غالبًا ما تصدر أجهزة الكمبيوتر القديمة صفيرًا أثناء بدء التشغيل - وهذا هو برنامج BIOS الذي يبلغ عن نتائج الاختبار. في بعض الأحيان يمكن استخدام مؤشر إضافي لإظهار رقم الخطأ.





إذا سارت الأمور على ما يرام ، يبدأ BIOS عملية البحث عن أداة تحميل نظام التشغيل. للقيام بذلك ، يبدأ في فحص جميع محركات الأقراص الثابتة المتصلة باللوحة الأم. تتم معالجة البيانات الموجودة على الأقراص الفعلية في وحدات تسمى قطاع ، وعادة ما تكون 512 بايت ، ولكن المعيار الحالي هو 4096 بايت. يكتب مثبت Windows رمز برنامج خاص وبيانات القسم إلى القطاع الأول على القرص. يسمى هذا القطاع سجل التشغيل الرئيسي . القرص مقسم إلى أقسام ، مهيأ بنظام الملفات الخاص بهم. 4 أقسام كحد أقصى ، يمكن تمديد كل منها (قسم موسع)، يمكن تقسيم هذا بشكل متكرر إلى 4 أقسام ومن الناحية النظرية لا يقتصر عددهم. بمجرد أن يجد BIOS سجل التشغيل الرئيسي ، فإنه يقرأ الرمز من هناك وينقل التحكم إليه. يبحث هذا الرمز بالتناوب في البيانات الموجودة على الأقسام ويجد القسم الذي تم تمييزه على أنه نشط ، ويحتوي على رمز أداة تحميل التشغيل Windows (هذا ليس القسم الذي يحتوي على C: \ Windows \ System32!) ، يسمى هذا القسم قسم النظام . كقاعدة عامة ، يشغل 100 ميغا بايت ويتم إخفاؤه عن المستخدم. يقوم القطاع الأول من هذا القسم بتخزين رمز التمهيد الذي يتم نقل التحكم إليه. هذا هو قطاع تمهيد وحدة التخزين ، الكود الموجود فيه يبحث عن ملف Bootmgr ، الذي تبدأ منه عملية تمهيد Windows. يتم إنشاء ملف Dice: الزهر عن طريق واحد الرابط بين Startup.com الملفات وBootmgr.exe .



يبدأ المعالج عمله في الوضع المسمى "Real" . هذا هو وضع التوافق ، حيث تعمل وحدة المعالجة المركزية بنفس الطريقة التي تعمل بها معالجات 16 بت القديمة التي لم يكن لديها دعم للذاكرة الظاهرية وتعمل مباشرة مع الذاكرة الفعلية من خلال ناقل عنوان 20 بت يسمح بمعالجة 1 ميغا بايت من الذاكرة. تم تشغيل برامج MS-DOS البسيطة في هذا الوضع وكان لها ملحق .COM. أول شيء يفعله Startup.com (Bootmgr) هو تبديل المعالج إلى الوضع "المحمي"، حيث تعني الحماية حماية العمليات من بعضها البعض. في هذا الوضع ، يتم دعم الذاكرة الافتراضية وعناوين 32 بت ، والتي يمكن استخدامها لمعالجة 4 جيجابايت من ذاكرة الوصول العشوائي. في الخطوة التالية ، يملأ Bootmgr جدول العناوين الافتراضية لأول 16 ميغابايت من ذاكرة الوصول العشوائي ويقوم بتشغيل الترجمة من العناوين الافتراضية إلى العناوين الفعلية. في هذا الوضع يعمل Windows. نظرًا لأنه في هذه المرحلة لم يتم إنشاء الأنظمة الفرعية لنظام التشغيل بعد ، فإن Bootmgr لديه تطبيقه البسيط وغير الكامل لنظام الملفات NTFS ، والذي بفضله يجد ملف BCD (بيانات تكوين التمهيد) ، والذي يخزن إعدادات معلمات تمهيد نظام التشغيل. يمكنك تحريره باستخدام الأداة المساعدة BcdEdit.exe . يمكن أن تشير إعدادات BCD هذه إلى أن Windows كان في حالة إسبات ثم سيقوم Bootmgr بتشغيل البرنامجWinResume.exe ، الذي يقرأ الحالة من ملف Hyberfil.sys في الذاكرة ويعيد تشغيل برامج التشغيل. إذا كانت BCD تشير إلى وجود أنظمة تشغيل متعددة ، فسيعرض Bootmgr قائمة بها ويطلب من المستخدم تحديدها. إذا كان هناك نظام تشغيل واحد ، فإن Bootmgr يقوم بتشغيل WinLoad.exe ، وهذه العملية تقوم بالعمل الرئيسي لتهيئة Windows:

  1. تحديد إصدار Windows kernel المناسب. يمكنك التفكير في الأمر على أنه Windows10.exe على الرغم من أنه يسمى بالفعل NtOsKrnl.exe. ما هي الإصدارات الموجودة؟ حسب ويكيبيديا:

    • ntoskrnl.exe هو نواة Windows ذات معالج واحد. بدون دعم PAE
    • ntkrnlmp.exe (English NT Kernel ، إصدار متعدد المعالجات) - Windows متعدد المعالجات kernel. بدون دعم PAE
    • ntkrnlpa.exe — Windows PAE.
    • ntkrpamp.exe — Windows PAE.


  2. HAL.dll (Hardware Abstraction Layer), CPU.
  3. vgaoem.fon
  4. , . National Language System.
  5. تحميل سجل النظام في الذاكرة ، فهو يحتوي على معلومات حول برامج التشغيل المراد تحميلها. توجد معلومات حول جميع برامج التشغيل في HKLM \ SYSTEM \ CurrentControlSet \ Services \ . تحتوي برامج التشغيل التي تحتاج إلى التحميل على مفتاح البدء = SERVICE_BOOT_START (0). سنتحدث عن جهاز التسجيل في مقال آخر.
  6. يقوم بتحميل برنامج تشغيل نظام الملفات للقسم الذي توجد عليه ملفات برنامج التشغيل.
  7. يقوم بتحميل برامج التشغيل في الذاكرة ، ولكن لا يتم تهيئتها بعد بسبب التبعيات الدائرية.
  8. تحضير سجلات وحدة المعالجة المركزية (CPU) لتنفيذ Windows kernel المحدد في الخطوة الأولى - NtOsKrnl.exe.


عندما يتم تحميل برامج التشغيل ، يتحقق WinLoad من التوقيعات الرقمية الخاصة بهم وإذا لم تتطابق ، ستكون هناك شاشة زرقاء ( BSOD ) أو خضراء ( GSOD ، لتجميعات المعاينة الداخلية) "شاشة الموت".





قم بتشغيل UEFI





مثال على شاشة تمهيد UEFI



BIOS موجود منذ أكثر من 30 عامًا وفي محاولة لتصحيح عيوبه ، أنشأت Intel مبادرة Intel Boot في عام 1998 ، وأعيدت تسميتها لاحقًا باسم EFI وتم التبرع بها لمنتدى EFI في عام 2005. عيوب BIOS:

• يعمل فقط في وضع 16 بت

• يمكنه معالجة 1 ميغا بايت فقط من ذاكرة الوصول العشوائي

• غالبًا ما يكون لديه مشاكل في التوافق

• MBR مقصور على أربعة أقسام قرص رئيسية فقط

• قرص نظام التشغيل لا يمكن أن يكون أكثر من 2.2 تيرابايت.

• لديه قدرات محدودة للغاية للتحقق من محمل نظام التشغيل.

تم استبدال BIOS بـ UEFI ، وهو في الواقع نظام تشغيل مصغر يمكن تشغيله في 32 بت و 64 بت. من أجل التوافق ، هناك خيار وحدة دعم التوافق، والذي تم تضمينه في الإعدادات ويحاكي BIOS.





في UEFI ، يحدث التمهيد في الشاهد الأصلي للمعالج - 32 أو 64 ، وهناك وصول إلى كل الذاكرة ، والذاكرة الافتراضية مدعومة ، وتمكين التمهيد الآمن ، ومن الممكن تشغيل برامج مكافحة البرامج الضارة قبل بدء تحميل نظام التشغيل. ترتيب تمهيد نظام التشغيل في UEFI:

  1. تهيئة البرامج الثابتة وبدء تشغيلها ، وإطلاق مجموعة الشرائح.
  2. اختبار POST ، على غرار BIOS
  3. تحميل برامج تشغيل EFI والعثور على قرص تمهيد مؤهل من EFI
  4. ابحث عن مجلد باسم EFI. تتطلب مواصفات UEFI أن يكون هناك قسم لقسم نظام EFI ، مهيأ لنظام الملفات FAT ، بحجم 100 ميجابايت - 1 جيجابايت أو لا يزيد عن 1٪ من حجم القرص. يحتوي كل نظام Windows مثبت على دليل خاص به على هذا القسم - EFI \ Microsoft .

  5. UEFI NVRAM ( ) .
  6. EFI/Microsoft/Boot/BootMgrFw.efi.
  7. BootMgrFw.efi BCD, BCD. WinLoad.efi, C:\Windows\System32\winload.efi.


لعرض محتويات قسم نظام EFI ، افتح وحدة تحكم مع حقوق المسؤول (WinKey + X => Windows PowerShell (المسؤول)) وقم بتشغيل أوامر mountvol Z: / s ، Z: ، dir . القرص المضغوط - يغير الدليل.

يتمثل الاختلاف الرئيسي بين مكونات BootMgr و WinLoad لـ UEFI من نظرائهم في BIOS في أنهم يستخدمون واجهة برمجة تطبيقات EFI بدلاً من مقاطعات BIOS ، وتنسيقات أقسام التمهيد MBR BIOS و EFI System Partition مختلفة تمامًا.



تهيئة Kernel



دعني أذكرك بأننا نفكر في تحميل الكمبيوتر في سياق لوحة المفاتيح ، لذلك لا يجب التركيز على جميع المراحل. من الضروري أن نفهم مكان وجود لوحة المفاتيح في هذه العملية ، ويتم تمييز المراحل المهمة للفهم .

في المرحلة السابقة ، تم إطلاق مكون WinLoad.exe / WinLoad.efi ، والذي يقوم بتشغيل NtOsKrnl.exe عن طريق تحديد معلمات التمهيد في المتغير الشامل nt! KeLoaderBlock (ذاكرة وضع kernel متاحة لجميع العمليات) ، والتي جمعها WinLoad أثناء عملها. وتشمل هذه:

  1. مسارات النظام (Windows bootloader) و Boot ( C: \ Windows \ System32 ) الدلائل.
  2. مؤشر إلى جداول الذاكرة الظاهرية التي أنشأتها WinLoad
  3. شجرة مع وصف للأجهزة المتصلة ، يتم استخدامها لإنشاء مفتاح التسجيل HKLM \ HARDWARE.
  4. نسخة من التسجيل HKLM \ System الذي تم تنزيله
  5. مؤشر إلى قائمة برامج التشغيل المحملة (ولكن غير المهيأة) المشاركة في بدء تشغيل Windows.
  6. معلومات أخرى مطلوبة للتنزيل.


يتم تهيئة Windows kernel على مرحلتين. قبل ذلك ، تتم تهيئة طبقة تجريد الأجهزة ، والتي ، من بين أشياء أخرى ، تقوم بتكوين وحدات التحكم بالمقاطعة لكل وحدة معالجة مركزية.

في نفس المرحلة ، يتم تحميل السلاسل مع رسائل الموت الزرقاء في الذاكرة ، لأنه في وقت السقوط قد يتعذر الوصول إليها أو تلفها.

  • المرحلة الأولى من تهيئة النواة:

    1. Executive – , , . Windows SKU (Stock Keeping Unit), Windows 10 SKU — Home, Pro, Mobile, Enterprise, Education.
    2. Driver Verifier, .
    3. , API (memory services), .
    4. (kernel debugger) .
    5. Windows.
    6. Object Manager – . – . handle table, HWND .
    7. Security Reference Monitor .
    8. Process Manager . Idle System ( “Windows10.exe” NtOsKrnl.exe), , .
    9. User-Mode Debugging Framework.
    10. Plug and Play Manager. PnP – , . .


  • . 51 , :

    1. System (NtOsKrnl.exe) . . – 31.
    2. HAL .
    3. Windows Startup Screen, progress bar.
    4. Executive Semaphore, Mutex, Event, Timer.
    5. User-Mode Debugger .
    6. symbolic link \SystemRoot.
    7. NtDll.dll . Windows APIs.
    8. .
    9. Windows ALPC . named pipes Windows Communication Foundation .
    10. I/O Manager, . .

      Windows Management Instrumentation Event Tracing for Windows ( Windows Performance Analyzer). .
    11. SMSS.exe (Session Manager Sub System). , Windows.




– SMSS, CSRSS, WinInit



يختلف SMSS.exe عن عمليات المستخدم ، فهو عملية أصلية وهذا يمنحها أذونات إضافية. يعمل SMSS.exe مع kernel الذي يتجاوز واجهة برمجة تطبيقات Windows ، ويستخدم ما يسمى واجهة برمجة التطبيقات الأصلية . Windows API عبارة عن غلاف حول واجهة برمجة التطبيقات الأصلية. يبدأ SMSS.exe أولاً نظام Windows الفرعي ( CSRSS.exe - Client Server Runtime Sub System ) وينتهي من تهيئة السجل.



تم وضع علامة على عملية SMSS.exe ومؤشرات الترابط على أنها حرجة ، مما يعني أنه إذا تم إنهاؤها بشكل غير متوقع ، على سبيل المثال بسبب خطأ ما ، فسيؤدي ذلك إلى تعطل النظام. للتواصل مع الأنظمة الفرعية ، على سبيل المثال ، استدعاء API لإنشاء جلسة جديدة ، يقوم SMSS بإنشاء منفذ ALPC يسمى SmApiPort... يتم تحميل متغيرات البيئة من السجل ، ويتم تشغيل برامج مثل Check Disk (autochk.exe ، هذه البرامج مكتوبة في التسجيل HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ BootExecute ). يتم تشغيل SMSS.exe لكل جلسة مستخدم. كل جلسة لها المتغيرات العالمية الخاصة بها (قائمة انتظار الرسائل ، على سبيل المثال) بسبب آلية الذاكرة الافتراضية. يحتوي Windows على سياقات الخيط والعملية والجلسة. يبدأ كل SMSS.exe مثيله الخاص من النظام الفرعي ، في الوقت الحالي هو فقط CSRSS.exe (Windows) ، في الماضي ، تم دعم أنظمة التشغيل OS / 2 (os2ss.exe) و POSIX (psxss.exe) ، لكن هذه الفكرة لم تكن ناجحة. ينتقل أول SMSS.exe إلى وضع السكون في انتظار عملية WinInit.exe. تقوم بقية المثيلات بدلاً من ذلك بإنشاء عملية WinLogon التي تعرض واجهة مستخدم تسجيل الدخول.



WinInit.exe تهيئة النظم الفرعية لخلق قذيفة رسومية - محطة ويندوز و أجهزة الكمبيوتر المكتبية ، وهذا ليس سطح المكتب التي تراها، وهذا هو مفهوم ويندوز مختلفة. ثم تبدأ العمليات:

  1. Services.exe - مدير التحكم في الخدمات (SCM) يبدأ تشغيل الخدمات وبرامج التشغيل التي تم وضع علامة عليها على أنها بدء تلقائي. بدأت الخدمات في عمليات ملف Svchost.exe . هناك أداة مساعدة تسمى tlist.exe والتي ، عند تشغيلها باستخدام المعلمة tlist.exe -s ، ستطبع إلى وحدة التحكم أسماء الخدمات في كل من ملف Svchost.exe.
  2. LSASS.exe - سلطة النظام المحلي.
  3. LSM.exe - مدير الجلسة المحلية.


WinLogon.exe - يقوم بتحميل موفري بيانات الاعتماد ، والتي يمكن أن تكون كلمة مرور ، وبطاقة ذكية ، ورقم تعريف شخصي ، و Hello Face. إنه يولد عملية LogonUI.exe ، والتي تعرض للمستخدم واجهة للمصادقة ، ثم يتحقق من صحة البيانات المدخلة (تسجيل الدخول وكلمة المرور ، PIN).



إذا سارت الأمور على ما يرام ، فسيبدأ WinLogon العملية المحددة في مفتاح التسجيل HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ WinLogon \ Userinit . بشكل افتراضي ، هذه هي عملية UserInit.exe ، والتي:

  1. يقوم بتشغيل البرامج النصية المحددة في السجلات:
    • HKCU \ البرامج \ السياسات \ مايكروسوفت \ ويندوز \ النظام \ البرامج النصية
    • HKLM \ SOFTWARE \ السياسات \ مايكروسوفت \ ويندوز \ النظام \ البرامج النصية
  2. User Profile Quota, %SystemRoot%\System32\Proquota.exe
  3. Windows, Explorer.exe. :
    • HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
    • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell


يقوم WinLogon بإعلام مزود الشبكة بالمستخدم الذي قام بتسجيل الدخول ، والذي يقوم باستعادة أقراص النظام والطابعات المخزنة في السجل وتوصيلها به. موفر الشبكة هو ملف mpr.dll من مجلد النظام ، والذي تتم استضافته بواسطة عملية ملف Svchost.exe ، أي خدمة Windows.



تبدو شجرة العملية على هذا النحو ، حيث يمكنك معرفة من أنشأ من (لا تظهر جميع العمليات ، فقد تختلف قليلاً عن أحدث إصدارات Windows).





أين لوحة المفاتيح هنا؟



أثناء بدء التشغيل ، يقرأ Windows kernel معلومات حول وحدة تحكم ناقل النظام من السجل ، كقاعدة عامة ، هذا هو ناقل PCI (غالبًا MSI) ، ووحدات تحكم منفذ الإدخال / الإخراج ، بما في ذلك USB ، PS / 2 ، متصلة به. يتم تسجيل المعلومات المتعلقة به أثناء تثبيت Windows. يقوم النظام بتحميل برنامج تشغيل له ويتجاوز بشكل متكرر جميع المنافذ ، كما يقوم بتحميل برنامج التشغيل الخاص به لكل منها. يمكن دمج برامج التشغيل في عقد برنامج التشغيل ، على سبيل المثال سيتم توصيل برنامج تشغيل لوحة المفاتيح ببرنامج تشغيل منفذ PS2. لكن منفذ USB أكثر تعقيدًا - أولاً برنامج تشغيل المنفذ ، ثم برنامج التشغيل للعمل مع بروتوكول HID ، وبعد ذلك فقط لوحة المفاتيح.



يتم التحكم في كل منفذ من خلال شريحة خاصة به ، والتي تراقب الاتصال ، وتستقبل / ترسل إشارات بين وحدة المعالجة المركزية والجهاز. إذا لم يتم تضمين شرائح الجسر الجنوبي في وحدة المعالجة المركزية ، كما يحدث غالبًا في أجهزة الكمبيوتر المحمولة ، ولكنها موجودة كشريحة منفصلة على اللوحة الأم ، فسيكون من الأصح القول: الإشارة بين الجسر الجنوبي ووحدة التحكم في المنفذ. تحتوي شريحة منفذ التحكم على خط مخصص مع وحدة تحكم المقاطعة (PIC أو APIC) ، والتي من خلالها يمكن أن تطلب من وحدة المعالجة المركزية الانتباه إلى نفسها ، على سبيل المثال ، قراءة البيانات من لوحة المفاتيح (منفذ PS / 2 ، مع USB ، قصة أخرى). نظرًا لأن نظام التشغيل قد قام بتحميل برنامج تشغيل للمنفذ ، فيمكنه إصدار أوامر إليه وقراءة البيانات وإرسالها. في مثالنا ، تم تحميل برنامج التشغيل من C: \ Windows \ System32 \ i8042prt.sys . دعنا نتذكر المقال السابق . في أجهزة الكمبيوتر القديمة مع PIC على شريحةكان Intel 8259 يحتوي على 15 خطًا للمقاطعة ، حيث تم توصيل لوحة المفاتيح بدبوس IRQ1 ، ومؤقت IRQ0 ، والماوس بـ IRQ12 ، والذي كان في الواقع الجزء الخامس من شريحة 8259 الثانية ، والتي ضاعفت مقاطعاتها من خلال دبوس IRQ2 لوحدة التحكم الأولى. يمكن أن تحتوي بلدان جزر المحيط الهادئ الحديثة على 255 دبوسًا لإشارات المقاطعة. أثناء التمهيد ، يقوم نظام التشغيل ببرمجة APIC / PIC لإرجاع رقم معين ، على سبيل المثال ، عند وصول مقاطعة من لوحة المفاتيح أو منفذ USB ، وبهذا الرقم تجد وحدة المعالجة المركزية الوظيفة التي سيتم تنفيذها في جدول متجه المقاطعة . يتم تحديد رقم المقاطعة بواسطة HAL و Plug'n'Play Manager... تبحث وحدة التحكم في المقاطعة عن إشارة على دبابيسها بترتيب معين ، على سبيل المثال ، في حلقة لا نهائية ، تقوم بفحص الجهد على المسامير من 1 إلى MAX_PIN. يحدد هذا الترتيب الأولوية ، على سبيل المثال ، ستظهر لوحة المفاتيح قبل الماوس ، وسيظهر المؤقت أمام لوحة المفاتيح. من أجل عدم الاعتماد على خصائص عمل وحدات التحكم بالمقاطعة ، يلخص Windows مفهوم IRQ (طلب المقاطعة) في IRQL (مستوى طلب المقاطعة) . إذا كانت وحدة التحكم بالمقاطعة تحتوي على 15 أو 255 سطرًا على الأقل ، فسيتم تعيينها جميعًا إلى 32 IRQL لـ x86 و 15 IRQL لـ x64 و IA64.
ماذا تعني أولويات IRQL:

  1. عالية - عند تعطل النظام ، عادة ما يكون استدعاء لوظيفة KeBugCheckEx.
  2. انقطاع التيار الكهربائي - غير مستخدم. تم تصميمه في الأصل لنظام التشغيل Windows NT.
  3. Interprocessor Interrupt – CPU , TLB cache, system shutdown, system crash (BSOD).
  4. Clock – , .
  5. Profile – real-time clock (local APIC-timer) kernel-profiling .
  6. Device 1 … Device N – I/O. , DPC (Deferred Procedure Call), . Dispatch DPC
  7. Dispatch DPC — .
  8. APC — Asynchronous Procedure Call. WaitForSingleObject, Sleep .
  9. Passive/Low — User Mode.


إذا كنت تبرمج دائمًا في وضع المستخدم ، فأنت لم تسمع عن IRQL مطلقًا ، لأنه يتم تنفيذ جميع برامج المستخدم بأولوية سلبية / منخفضة (0). بمجرد حدوث حدث مع b حول مستوى أولوية lshim (أحداث لوحة المفاتيح ، مؤقت جدولة مؤشر الترابط) ، يحفظ المعالج حالة الخيط المتقطع ، وهي قيم تسجيل وحدة المعالجة المركزية ، ويستدعي مقاطعة المرسل ( مرسل المقاطعة ، مجرد وظيفة) ، مما يزيد من أولوية IRQL عبر واجهة برمجة تطبيقات KeRaiseIrql في HAL وتستدعي مباشرةً روتين خدمة المقاطعة نفسها . بعد ذلك ، يتم تخفيض وحدة المعالجة المركزية IRQL إلى المستوى السابق من خلال وظيفة KeLowerIrqlويبدأ الخيط المتقطع في المعالجة من نفس المكان الذي تمت فيه مقاطعته. يعتمد جدولة الخيط على هذه الآلية . يقوم بتعيين مؤقت يقوم ، في فترة زمنية معينة (شريحة زمنية) ، بإنشاء مقاطعة مع أولوية DPC / الإرسال (2) ، وفي روتين خدمة المقاطعة الخاص به ، وفقًا لخوارزمية معينة ، يقوم بتعيين مؤشر ترابط جديد للتنفيذ.



يتم تنفيذ آلية IRQL على مستوى البرنامج في طبقة تجريد الأجهزة ( HAL.dll ) ، وليس الأجهزة. أنظمة النوافذ لديها سائق حافلة) ، والذي يحدد وجود الأجهزة المتصلة بالحافلات - PCI و USB وما إلى ذلك وأرقام المقاطعة التي يمكن تخصيصها لكل جهاز. ينقل سائق الناقل هذه المعلومات إلى مدير التوصيل والتشغيل ، والذي يقرر بالفعل أرقام المقاطعة التي سيتم تعيينها لكل جهاز. علاوة على ذلك ، ينشئ محكم المقاطعة داخل PnP Mgr ( PnP interrupt Arbiter ) روابط بين IRQ و IRQL.



عند وصول مقاطعة لوحة المفاتيح ، يتم تعيين أي سلسلة رسائل قيد التنفيذ (قد يكون هذا البرنامج الخاص بك) للتعامل معها. يرفع مرسل المقاطعة أولوية CPU IRQL إلى أحد مستويات Device1-DeviceN . بعد ذلك ، لن يتمكن مدير الذاكرة الافتراضية من العثور على الصفحة إذا لم يتم تحميلها في ذاكرة الوصول العشوائي (لن يكون قادرًا على معالجة خطأ الصفحة) ، لن يتمكن برنامج جدولة مؤشر الترابط من مقاطعة التنفيذ لأنها تعمل جميعها في IRQL أقل. تتمثل المهمة الرئيسية لبرنامج تشغيل لوحة المفاتيح في هذه اللحظة في قراءة البيانات المستلمة وحفظها لمزيد من المعالجة. تتم كتابة البيانات إلى كائن من النوع _DPC ( استدعاء الإجراء المؤجل ) ، والذي يتم حفظه في قائمة دفق DPC (شيء مثل std :: list <DPC> ، في نظام التشغيل kernel ، بدلاً من المصفوفات ، يتم استخدام القوائم المرتبطة). بمجرد معالجة المقاطعات من جميع الأجهزة الخارجية ، يتم خفض IRQL لمؤشر الترابط إلى مستوى DPC حيث تتم معالجة الإجراءات المؤجلة (DPC). يستدعي رمز معالج DPC الخاص بلوحة المفاتيح وظيفة من برنامج تشغيل لوحة المفاتيح Kbdclass.sys :



VOID KeyboardClassServiceCallback(
  _In_    PDEVICE_OBJECT       DeviceObject,
  _In_    PKEYBOARD_INPUT_DATA InputDataStart,
  _In_    PKEYBOARD_INPUT_DATA InputDataEnd,
  _Inout_ PULONG               InputDataConsumed
);


لذلك ، يتلقى برنامج تشغيل لوحة المفاتيح (kbdclass.sys) البيانات من المنفذ (USB ، PS2) من خلال مقاطعة ويكتبها من خلال WriteFile ، وهو مكون داخل Windows kernel يستيقظ ، ويقرأها باستخدام ReadFile API ويضيف رسائل من لوحة المفاتيح إلى قائمة الانتظار. يمكن استخدام واجهات برمجة تطبيقات الملفات لقراءة البيانات من برامج التشغيل. من هذه اللحظة ، تبدأ معالجة البيانات بواسطة مكدس إدخال Windows ، والمزيد حول هذا الموضوع في المقالة التالية.



إذا كان لديك جهاز كمبيوتر به منفذ PS2 وتعرف كيفية استخدام WinDbg في وضع kernel ، فيمكنك بسهولة العثور على معالج مقاطعة لوحة المفاتيح عن طريق كتابة ! Idt ، والذي سيعرض جدول متجه المقاطعة بالكامل .... تتداخل المقاطعة في مسار البرنامج ، ويعني متجه الكلمات هنا الاتجاه ، واتجاه تنفيذ البرنامج. تم إنشاء WinDbg خصيصًا لتصحيح أخطاء Windows ، ويسمى أحدث إصدار WinDbgX. يحتوي على واجهة نصية تخيف الأشخاص الذين اعتادوا على Visual Studio ، ولكنها توفر العديد من الخيارات ، على وجه الخصوص ، تنفيذ البرامج النصية. تم تمييز مقاطعة منفذ PS2 الأرجواني باللون الأحمر. تسمى الوظيفة التي تتعامل معها I8042KeyboardInterruptService ، والموجودة في ملف i8042prt.sys.



BOOLEAN
I8042KeyboardInterruptService(
  IN  PKINTERRUPT Interrupt,
  IN  PVOID Context
  );

Routine Description:

    This is the interrupt service routine for the keyboard device when
    scan code set 1 is in use.

Arguments:

    Interrupt - A pointer to the interrupt object for this interrupt.

    Context - A pointer to the device object.

Return Value:

    Returns TRUE if the interrupt was expected (and therefore processed);
    otherwise, FALSE is returned.




الآن السؤال الذي يطرح نفسه ، من أين يحصل معالج المقاطعة على حجته؟ من الذي ينقلها؟ بعد كل شيء ، لا تعرف وحدة المعالجة المركزية شيئًا عنها. إذا وضعت في نقطة لها، فقد كان أكثر فاجأ لرؤية عدد قليل من السمات أعلى على المكدس:



0: دينار كويتي> KC

# الدعوة الموقع

! 00 i8042prt I8042KeyboardInterruptService

! 01 الإقليم الشمالي KiCallInterruptServiceRoutine

! 02 الإقليم الشمالي KiInterruptSubDispatch

! 03 الإقليم الشمالي KiInterruptDispatch

! 04 الإقليم الشمالي KiIdleLoop




وتفسير ذلك بسيط - هو ليست الوظيفة المخزنة في سجل IDT الخاص بالمعالج. ما تراه في الصورة أعلاه هو في الواقع كائنات من النوع _KINTERRUPT... يحتوي جدول المقاطعة على رمز تجميع خاص (nt! KiIdleLoop) يعرف كيفية العثور على الكائن الذي يصف المقاطعة في الذاكرة. ما المثير في ذلك؟

  1. .
  2. i8042prt!I8042KeyboardInterruptService, PS2 IN AL, 0x60 – 0x60 AL.
  3. dispatcher – №2 .
  4. CPU. CPU , .
  5. . , Windows . IRQL (Interrupt Request Level) – IRQ.


بمجرد استدعاء معالج مقاطعة لوحة المفاتيح ، سيقوم بإخطار برنامج تشغيل لوحة المفاتيح بالبيانات المستلمة ، وبعد ذلك سيتم إخطار نواة نظام التشغيل ، والتي ، بعد معالجة البيانات ، سترسلها على طول مكدس الإدخال ، حيث يمكن تسليمها إلى التطبيق الذي سيستجيب لها ، أو قبل ذلك إلى المعالج اللغات (الحروف الآسيوية ، التصحيح التلقائي ، الإكمال التلقائي).

لا يتفاعل نظام التشغيل kernel بشكل مباشر مع برنامج تشغيل لوحة المفاتيح ؛ ويستخدم Plug'n'Play Manager لهذا الغرض. يوفر هذا المكون واجهة برمجة تطبيقات IoRegisterPlugPlayNotification التي ستستدعي وظيفة رد الاتصال المقدمة عند إضافة جهاز أو إزالته.



بضع كلمات حول USB



قد يتطلب التعرف على تشغيل منفذ USB مقالة منفصلة تصف تشغيله ، بالإضافة إلى وصف معالجة بيانات HID على Windows. هذا من شأنه أن يعقد المادة كثيرًا ، وهناك بالفعل مقالات جيدة حول هذا الموضوع ، لذا فإن PS2 هو مثال ممتاز بسبب بساطته.



تم إنشاء USB كمنفذ عالمي لجميع الأجهزة ، سواء كانت لوحة مفاتيح ، أو كاميرا ، أو ماسحًا ضوئيًا ، أو عجلة ألعاب مزودة بدواسات ، أو طابعة ، وما إلى ذلك. بالإضافة إلى ذلك ، فهي تدعم تداخل المنافذ - اللوحة الأم USB => شاشة مع USB => لوحة مفاتيح مع USB التي يتصل بها الماوس ، ومحرك أقراص فلاش ومحور USB الذي يتصل به محرك الأقراص الثابتة. عند إلقاء نظرة على دبابيس USB 2.0 ، سترى أنها ليست مصممة لنقل أي بيانات محددة ، مثل PS2. لا يوجد سوى أربعة منهم - زوج مجدول لنقل بتات البيانات ، زائد وناقص الطاقة.









كابل USB 2.0 يؤدي إلى USB 3.0 أسرع بخمس دبابيس إضافية. كما ترى ، لا يوجد خط CLOCK للمزامنة ، وبالتالي فإن منطق نقل البيانات أكثر تعقيدًا. غادر USB 2.0 و USB 3.0 الأيمن للمقارنة.

يتم إرسال جميع البيانات عبر بروتوكول HID (جهاز الواجهة البشرية) ، الذي يصف التنسيقات وترتيب التفاعل ونقل البيانات وكل شيء آخر. يأخذ معيار USB 2.0 650 صفحة ، وثيقة مواصفات فئة HID التي تصف تشغيل الأجهزة (الماوس ولوحة المفاتيح وما إلى ذلك) - 97 صفحة ، يوصى بدراستها إذا كنت تعمل مع USB.



بادئ ذي بدء ، يجب أن يخبر الجهاز المتصل عن نفسه ، ولهذا فإنه يرسل العديد من هياكل البيانات ، والتي تشير إلى معرف الجهاز ومعرف الشركة المصنعة الذي يمكن من خلاله لمدير Plug'n'Play العثور على معلومات في السجل ، وتحميل وتوصيل برامج التشغيل. أجهزة USB سلبية ، أي يجب على المضيف التحقق من وجود البيانات نفسها في فترة زمنية معينة. يتم تحديد معدل الاستقصاء وحجم حزمة البيانات في أحد واصفات جهاز USB. الحد الأقصى لحجم الحزمة هو 64 بايت ، وهو أكثر من معلومات كافية حول ضغطات المفاتيح.



يحتوي Windows على دعم HID مدمج ، فهو ليس بسيطًا مثل ربط برنامج تشغيل منفذ PS2 ببرنامج تشغيل لوحة المفاتيح لأن برنامج تشغيل HID يجب أن يكون قادرًا على التعامل مع جميع البرامج النصية التي يدعمها البروتوكول. بغض النظر عن موفر البيانات - منافذ PS2 أو USB أو Remote Desktop أو جهاز افتراضي - في الجزء العلوي من عقدة برنامج التشغيل ، سيكون هناك Kbdclass ، والذي ستتلقى منه OS kernel المعلومات. ستتم معالجة إشعار مرفق لوحة المفاتيح من خلال Plug'n'Play Manager ، لذلك لا يهم Windows kernel أي منفذ أو مصدر بيانات الجهاز المستخدم.



الجزء 1 - أساسيات نظام التشغيل والكمبيوتر

الجزء 2 - كيف تعمل اللوحة الأم ولوحة المفاتيح من خلال منفذ PS2



All Articles