التحكم في الطاقة في ويندوز. التحكم في الطاقة في دورة أداء Windows

برامج تشغيل وضع Kernel: الجزء 1: المفاهيم الأساسية - أرشيف Wasm.ru

نظرة عامة على العمارة

ينقسم العالم الداخلي في نظام التشغيل Windows 2000 إلى جزأين مع حدود محددة بوضوح، سواء من حيث مساحة العنوان، وفيما يتعلق بحقوق وواجبات القانون في مساحة العنوان التنفيذية.

مع فصل مساحة العنوان، كل شيء بسيط بشكل مدهش. جميع الأربعة المتاحة في الهندسة المعمارية 32 بت، يتم تقسيم غيغابايت إلى قسمين متساويين (4GT RAM ضبط وملحق العناوين الفيزيائية أنا أقل zczotic). يتم إعطاء النصف السفلي لعمليات وضع المستخدم، فإن الأعلى ينتمي إلى النواة.

مع فصل الحقوق والمسؤوليات أكثر صعوبة قليلا.

تتضمن العمليات التالية المستخدم:

  • عمليات دعم النظام (عمليات دعم النظام) - على سبيل المثال، عملية إدخال نظام WINLOGON (تم تطبيقها في \\٪ SystemRoot٪ \\ System32 \\ Winlogon.exe)؛
  • خدمات الخدمات (عمليات الخدمة) - على سبيل المثال، بكرة الطباعة؛
  • تطبيقات مخصصة (تطبيقات المستخدم) - هناك خمسة أنواع: Win32، Windows 3.1، MS-DOS، POSIX و OS / 2؛
  • النظم الفرعية للبيئة (النظم الفرعية للبيئة) - يتم دعم النظم الفرعية للبيئة الثلاثة: Win32 (يتم تنفيذها في \\٪ SystemRoot٪ \\ System32 \\ Csrss.exe)، Posix (تم تطبيقها في \\٪ \\٪ SystemRoot٪ \\ System32 \\ psxss.exe)، OS / 2 ( يتم تنفيذها في \\٪ SystemRoot٪ \\ System32 \\ OS2SS.exe).

تتكون Kernel من المكونات التالية:

    النظام التنفيذي (التنفيذي) - إدارة الذاكرة، العمليات والخيوط، إلخ؛
  • Kernel - تخطيط التدفق، وإرسال المقاطعات والاستثناءات، إلخ. (تم تنفيذه في \\٪ SystemRoot٪ \\ System32 \\ Ntoskrnl.exe)؛
  • برامج تشغيل برامج تشغيل الجهاز - برامج تشغيل الأجهزة، برامج تشغيل الشبكة، برامج تشغيل نظام الملفات؛
  • طبقة مجردة الأجهزة، HAL - تعزز المكونات الثلاثة للمكون أعلاه من الاختلافات بين بنية الأجهزة (التي يتم تنفيذها في \\٪ SystemRoot٪ \\ System32 \\ Hal.dll)؛
  • نظام النوافذ والرسومات (واجهة المستخدم الرسومية، واجهة المستخدم الرسومية) (تم تنفيذه في \\٪ systemroot٪ \\ system32 \\ win32k.sys).

تين. 1-1. نظام العمارة المبسطة Windows 2000

وضع المستخدم ووضع kernel

على الرغم من أن معالجات الأسرة Intel X86 تدعم أربعة مستويات من الامتيازات (تسمى حلقات الحماية)، يتم استخدام اثنين فقط في Windows: 0 أوه لوضع Kernel و 3rd لوضع المستخدم. هذا بسبب دعم المعالجات الأخرى (ألفا، MIPS)، حيث يتم تنفيذ مستويين فقط من الامتيازات. دعمت الإصدارات السابقة لنظام التشغيل Windows NT هذه المهنة، ولكن ظل دعم X86 فقط في نظام التشغيل Windows 2000.

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

تعتبر عمليات نظام المستخدمين أمرا خطيرا من حيث استقرار النظام. حقوقهم محدودة. وجميع أنواع محاولات تجاوز هذه القيود من الصعب التوقف.

تشترك مكونات kernel في مساحة عنوان واحدة، وأداء في وضع المعالج المميز (يسمى وضع kernel)، يمكن أن يؤدي كل شيء، بما في ذلك أوامر المعالج المميز، والحصول على وصول غير محدود ومباشر إلى بيانات النظام والرمز، ولديها مباشرة، أو عبر HAL، الوصول إلى المعدات.

يعتبر التعليمات البرمجية الأساسية (في الواقع هذا النظام نفسه) موثوقا به تماما. لذلك، يتم تحميلها في مساحة عنوان النظام، يصبح السائق جزءا من النظام ولا يتم فرض أي قيود على ذلك.

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

برامج تشغيل Windows 2000.

يدعم نظام التشغيل Windows 2000 أنواعا متعددة من برامج تشغيل الأجهزة.

هناك اثنان أساسيين لديهم ممثلين:

  • برامج تشغيل وضع المستخدم: برامج تشغيل وضع المستخدم:
    • برامج تشغيل الأجهزة الافتراضية، تستخدم VDDS لدعم برامج MS-DOS (عدم الخلط بينها مع برامج تشغيل VXD في نظام التشغيل Windows 95/98 - هذه أشياء مختلفة تماما، على الرغم من أن لديهم اسم واحد)؛
    • برامج تشغيل الطابعة.
  • برامج تشغيل وضع kernel (برامج تشغيل وضع kernel):
    • برامج تشغيل نظام الملفات (برامج تشغيل نظام الملفات) - تنفيذ المدخلات والإخراج إلى محركات الأقراص المحلية والشبكة؛
    • السائقين القديم - مكتوبة للإصدارات السابقة من نظام التشغيل Windows NT؛
    • برامج تشغيل برامج تشغيل الفيديو - تنفيذ عمليات الرسوم؛
    • دفق برامج التشغيل - برامج التشغيل البثية - تنفيذ الفيديو والصوت I / O
    • برامج تشغيل WDM (نموذج برنامج تشغيل Windows، WDM) - دعم TREAG وتشغيل تكنولوجيا وإدارة الطاقة. ميزة مميزة لها هي التوافق على مستوى التعليمات البرمجية المصدر بين نظام التشغيل Windows 98 و Windows Me و Windows 2000.

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

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

بواسطة هيكلها، برنامج تشغيل الجهاز هو أي شيء آخر كتنسيق PE (قابل للتنفيذ محمول، PE). نفس exe العادي و dll. فقط تحميل ويعمل على قواعد أخرى. يمكن اعتبار السائقين ك DLL من وضع Kernel المصمم لأداء المهام غير محلها من وضع المستخدم. الفرق الرئيسي هنا (غير العد مستوى الامتيازات) هو أننا لن نصل مباشرة إلى برنامج التشغيل، ولا رمز، ولا إلى بياناته، وسوف تستخدم الآلية الخاصة التي يوفرها المرسل الإدخال / الإخراج (مدير الإدخال / الإخراج ). يوفر I / O Respatcher بيئة لتشغيل السائقين، ويوفر أيضا آليات لتنزيلها وتفريغها وإدارتها.

البدء في تطوير برامج تشغيل نظام Kernel، سوف تشعر بالوافد الجديد المثالي، لأن إن التجربة السابقة بأكملها في استخدام API لن يساعد هنا - يوفر Kernel مجموعة مختلفة تماما من الوظائف. سيتعين عليك أيضا استخدام موثقة بشكل سيء (معرف فقط في ملفات الرأس) أو في جميع الوظائف غير الموثقة وهياكل البيانات.

برامج تشغيل واحدة ومتعددة المستوى

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

السياق الفيضان

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

  • في سياق تدفق المستخدم لطلب الإدخال / الإخراج؛
  • في سياق تدفق نظام وضع Kernel (تنتمي هذه الجداول إلى عملية النظام)؛
  • نتيجة للمقاطعة (وبالتالي، ليس في سياق عملية أو تدفق، والتي كانت الحالية في وقت المقاطعة).

أنا لا أفهم تماما كيف يمكنك القيام بشيء ما "ليس في سياق أي عملية أو تدفق"، ولكن بالنظر إلى سلطة الأشخاص الذين كتبوا (D. Solomon و M. Russinovich)، وكذلك ما لا نحتاج إليه ، لان. لن نتعامل مع أي برامج، لا مزيد من المقاطعات الأجهزة، حول الحالة الثالثة التي يمكنك نسها على الفور. أول خيارين لا يزالان. إذا بدأ استعلام I / O، فإننا في سياق تدفق هذا الطلب بدأ، وهذا يعني أنه يمكننا الوصول مباشرة إلى مساحة العنوان التي ينتمي إليها هذا الدفق. إذا كنا في سياق دفق النظام، فيمكن أن تكون هناك ترتبط مباشرة بأي عملية مستخدم، ويمكننا دائما الاتصال بالنظام. إذا كنت بحاجة إلى برنامج التشغيل لمعرفة نوع العملية في مثل هذه العملية، فستضطر إما بتحويل السياق نفسه، أو للبث عناوين إلى جداول الصفحة.

مستويات الاستعلام المقاطعة

المقاطعة جزء لا يتجزأ من أي نظام تشغيل. يتطلب المقاطعة معالجة، لذلك يتم نقل تنفيذ التعليمات البرمجية الحالية والتحكم إلى معالج المقاطعة. هناك كل من الأجهزة والبرمجيات المقاطعات. يتم تخزين المقاطعات وفقا لأولويتهم. يستخدم نظام التشغيل Windows 2000 مخططات تحديد أولويات المقاطعة المعروفة باسم مستويات الاستعلام المقاطعة (مستويات طلب المقاطعة، IRQL). في المجموع، هناك 32 مستويات، من 0 (السلبي) لديهم أدنى أولوية، 31 (عالية)، وجود أعلى جودة، على التوالي. علاوة على ذلك، المقاطعات مع IRQL \u003d 0 (السلبي) عبر IRQL \u003d 2 (DPC \\ Dispatch) هي البرامج، والمقاطعات مع IRQL \u003d 3 (الجهاز 1) عبر IRQL \u003d 31 (HIGH) هي أجهزة. لا تخلط بين مستويات الأولوية المقاطعة مع مستويات أولوية تدفق أشياء مختلفة تماما. انقطاع مع مستوى IRQL \u003d 0، والتحدث بدقة، ليس انقطاع، ل لا يمكن مقاطعة تشغيل أي رمز (لأنه يجب إجراء هذا الرمز في مستوى أقل من المقاطعة، ولكن لا يوجد مثل هذا المستوى). في هذا IRQL، يتم تنفيذ تدفقات نظام المستخدم. وسيتم أيضا تنفيذ رمز السائقين لدينا على هذا IRQL. هذا لا يعني أن رمز أي سائق يتم تنفيذه دائما في المستوى السلبي ". لن نتعامل ببساطة مع أي برنامج، ولا مقاطعات الأجهزة. ومن هنا، ما لا يقل عن اثنين من النواتج المهمة للغاية.

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

النقطة المهمة الثانية: في مستوى المقاطعة السلبي، يمكنك استدعاء أي وظائف kernel (في DDK في وصف كل وظيفة، من الضروري تحديد ما يمكن استدعاء المقاطعة المستوى)، وكذلك الوصول إلى صفحات الذاكرة التي تم إسقاطها في ملف الترحيل. عند مستويات انقطاع أعلى (DPC / DIPTHATH وارتفاع)، تؤدي محاولة الاستئناف إلى الصفحة المفقودة في الذاكرة الفعلية إلى انهيار النظام لا يمكن معالجة مدير الذاكرة (مدير الذاكرة) خطأ الصفحات.

"شاشة وفاة زرقاء"

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

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

من أجل رؤية الموت الزرقاء قدر الإمكان، يجب عليك التمسك بقاعدة واحدة بسيطة للغاية: "ستموت سبع مرات - قطع واحد" ... بمعنى "فحص سبع مرات - تشغيل واحد". بالتأكيد يقول فقط، لكن من الصعب القيام به. ولكن كقاعدة عامة، بالنظر إلى حقيقة أن هيكل برامج التشغيل التي ستكتبها (بعد قراءة هذه المقالات) بسيطة نسبيا، يمكنك التعامل مع الأخطاء قبل ظهور BSOD. إذا ظهر باستمرار أمام عينيك، ولا يمكنك فهم السبب، فمن الممكن توضيح الوضع هو تحليل تفريغ الطوارئ (تفريغ تحطم). يمكن قراءة حقيقة أنه كيفية جعلها وتحليلها في المقال عن طريق علامة Russinovich "تحليل مقالب ذاكرة الطوارئ" http://www.rosh.ru/win2000/2001/03/025.htm. هذا (تحليل) صعب للغاية، لكنني أعتقد أنني لن تصل إليها.

نظرا لي خجول، بحيث يمكن اعتبار كل ما سبق معلومات أساسية جدا عن تلك المبادئ ضرورية للغاية لفهمها. من المستحيل البدء في تطوير برامج تشغيل وضع Kernel دون وجود مفهوم أن هذا سياق دفق ومستويات المقاطعة وأولويات التدفقات أو وضع kernel / user، إلخ. إلخ. يشعر غير متأكد من بعض الأسئلة - قائمة بالمراجع أدناه.

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

طقم تطوير السائق.

الأول هو بالطبع مجموعة من طقم تطوير برنامج تشغيل الجهاز (مجموعة تطوير برنامج تشغيل Windows 2000، 2KDDK)، والتي يمكن تنزيلها بحرية من Microsoft (على أي حال، أنا دمدمتها خالية تماما من هنا: http://www.microsoft. com / ddk /). تتضمن هذه الحزمة وثائق مصدر غني بمعلومات عن هياكل البيانات الداخلية ووظائف Intrasystem المستخدمة بواسطة برامج تشغيل الأجهزة.

بالإضافة إلى الوثائق في DDK، مجموعة من ملفات المكتبة (* .lib)، والتي ستكون ضرورية تماما عند التخطيط. يتضمن DDK مجموعتين من هذه الملفات: للنسخة النهائية من Windows (تسمى Build Build)؛ وللصلاح الأخطاء (تسمى إطلاق الاختيار (فحص المبنى)). هذه الملفات موجودة في الكتالوجات٪ DDK٪ \\ Libfre \\ i386 و٪ DDK٪ \\ Libchk \\ i386، على التوالي. يتميز إصدار Debug بفحص خطأ أكثر صرامة. تحتاج إلى استخدام الملفات المقابلة لإصدار النظام الخاص بك عن طريق وضعها في الدليل \\ Masm32 \\ Lib \\ W2K.

الملفات تشمل ذلك

سنحتاج أيضا إلى ملفات (* .inc) ممكنة مع تعريفات من النماذج الأولية للوظائف. سنضطر أيضا إلى القيام بها (بدقة أكثر لي). لقد جربت الكثير من الأدوات المساعدة المختلفة التحويل * .LIB -\u003e .inc، كلاهما مدرج في حزمة MASM32 بواسطة حزمة Hutch، واندمجت معي في أوقات مختلفة مع الإنترنت لا نهاية لها. من كل ما لدي في المخزون، فقط protoize.exe by f0dder التعامل مع مهمتي، وأنا عمليا لم يكن لديك لحكم أي شيء بيدي. سوف تكمن Tulza الرائع في الدليل \\ Tools \\ Protoize. موقع المؤلف: http://f0dder.didjitalyprozen.com/. فقط لن تجدها هناك. أرسل F0DDER هذه الأداة المساعدة عدة مرات في المؤتمر http:/0board.win32asmcommunity.net/. يتضمن سوف تكمن في الدليل \\ WIST \\ W2K. يجب أن يتم وضعها في \\ Masm32 \\ cattalog \\ W2K \\ W2K. * تم استخدام .LIB للتحويل من أجل الإصدار المجاني لنظام التشغيل Windows 2000، حيث لدي هذا الخيار بالضبط (وربما كنت أيضا).

المشكلة التالية هي أكثر خطورة. يكاد يكون الغياب الكامل للملفات المضمنة في تعريفات الهياكل اللازمة، الثوابت الرمزية وحدات الماكرو. بالكاد يمكنك العثور على شيء نظيف على الشبكة - لا يمكنك أن تكون غريبة جدا هذا الدرس - اكتب برامج تشغيل وضع kernel على المجمع. يمكن العثور على شيء في Elicz http://www.anticracking.sk/elicz/. شيء في Y0DA http://mitglied.lycos.de/yoda2k/index.htm (أدلى جزئيا بنفسه، جزئيا مأخوذ من نفس Elicz). ولكن يتم ذلك من يده بشكل سيء، (مع كل الاحترام العميق لزملائنا السلوفاكية والألمانية): تختلف أسماء أعضاء العديد من الهياكل عن تلك المحددة في ملفات الرأس الأصلية من DDK؛ الهياكل المتداخلة والاشتراكات ليس لديها أسماء؛ على الرغم من أنه في الأصل دعا. وبشكل عام، كل شيء في بعض الاضطرابات، وعند عرض الانطباع الاكتئابي. انها ليست سيئة فقط ntstatus.inc. جزئيا يفسر ذلك حقيقة أن Elicz بدأت في خلق برمجته لا تزال في غياب DDK (كما يقول هو نفسه). في أي حال، لا أنصحك باستخدامها، على الأقل دون فحص دقيق. شيء، في وقت واحد، تومض في المؤتمر http:/board.win32asmcommunity.net/، ولكن الجودة ليست مثيرة للإعجاب للغاية. باختصار، والحل الصحيح الوحيد في هذا الموقف هو القيام بكل شيء بنفسك، يدويا، لأن أي أدوات تسمح لك بأتمتة هذه العملية، وأنا لا أعرف. إذا كنت، فجأة، تعال في شيء مفيد، لا تفكر في العمل - اسمحوا لي أن أعرف.

تصحيح السائقين

نحتاج أيضا إلى مصحح الأخطاء، ولأن رمز الوضع الأساسي سيضطر إلى تصحيح الأخطاء، فإن المصحح يحتاج إلى واحد مناسب. أفضل خيار سيكون softice. أو يمكنك استخدام جزء المصحح Kernel من DDK. يتطلب هذا المصحح على جهازي كمبيوتر - الرصاص والقياد، وهو ما لا يستطيع الجميع تحمله. كتب مارك روسينوفيتش (مارك روسينوفيتش، http://www.sysinternalers.com/) أداة مساعدة Livekd التي تتيح لك استخدام مصححات Kernel دون توصيل الكمبيوتر الثاني. أنا لا أعرف ما إذا كان موجودا على الموقع (غير محدد)، ولكن على القرص إلى كتاب "الجهاز الداخلي Microsoft Windows 2000" متاح. أيضا، هذا المصحح مفيد للغاية لدراسة النظام الداخلي للنظام، شريطة تنزيل أحرف محددة (أو كان ذلك ممكنا) من Microsoft.

  • ديفيد سليمان، مارك روسينوفيتش، "الداخلية Microsoft Windows 2000"، إد. "بيتر"، 2001.

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

  • Sven Shreiber، "ميزات غير موثقة لنظام التشغيل Windows 2000"، إد. "بيتر"، 2002.

    يتم الكشف عن كتاب عملي بحت للكشف عن الكثير من أسرار نظام التشغيل Windows 2000.

  • Walter Ony، "برنامج برنامج تشغيل Microsoft Driver"، Microsoft Press، 1999

    في هذا الكتاب، يتم إجراء التوقف على برامج تشغيل PLAG "N"، ولكن هذا لا يتوسل في جميع مزاياه، ل المبادئ الأساسية لتطوير السائقين عالمية.

  • Jeffrey Richter، "Windows للمهنيين: إنشاء تطبيقات Win32 فعالة، مع مراعاة تفاصيل الإصدار 64 بت من Windows"، إد. "بيتر"، 2000.

    لا يحتوي هذا الكتاب على موقف مباشر لبرامج البرمجة، ولكن أيضا مثيرة للاهتمام للغاية ؛-)

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

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

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

    إن عزل النواة هي تكنولوجيا أمنية تستند إلى المحاكاة الافتراضية، والتي توفر مستوى إضافي من الحماية ضد الهجمات الذكية. تعد سلامة الذاكرة أحد مكونات تكنولوجيا عزل kernel - تهدف الوظيفة إلى منع إدخال التعليمات البرمجية الضارة في عمليات الأمان العالية. يتم ضمان الحماية بسبب حقيقة أن صفحة الذاكرة الظاهرية في Kernel تبدأ فقط بعد مرور النزاهة الناجحة.

    النظر في كيفية تمكين وظيفة "سلامة الذاكرة" في تحديث Windows 10 أبريل 2018 لتعزيز أمان الكمبيوتر.

    تمكين سلامة الذاكرة

    • افتح مركز أمان Windows Defender.
    • حدد القسم "سلامة الجهاز".
    • في قسم "قسم عزل Kernel"، انقر فوق ارتباط "معلومات عزل النواة".
    • حرك مفتاح تكامل الذاكرة إلى الوضع النشط.

    بعد إكمال هذه الإجراءات، تحتاج إلى إعادة تشغيل الكمبيوتر بحيث تسري التغييرات.

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

    تصحيح مشاكل العزل نواة

    في بعض الحالات، يمكنك مواجهة مشكلات التوافق في بعض التطبيقات، إذا تم تشغيل عزل Kernel. لإصلاح المشكلات سيتعين عليك إيقاف تشغيل الوظيفة.

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

    ملحوظة: تغيير التسجيل غير صحيح يمكن أن يؤدي إلى مشاكل خطيرة. يوصى بإنشاء نسخة احتياطية من سجل Windows قبل إجراء هذه الخطوات. في قائمة محرر التسجيل، حدد ملف\u003e تصدير لحفظ النسخ الاحتياطي.

    • اضغط على مجموعة Windows + R الرئيسية لإظهار نافذة "تشغيل".
    • أدخل REGEDIT وانقر فوق "موافق" لبدء تشغيل محرر التسجيل.
    • الذهاب إلى الطريقة التالية:
    HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlset \\ Control \\ Tibrguard \\ Seniarios \\ HyperVIStenforcedCodeRity
    • نقرتين متتاليتين ممكن..
    • تغيير القيمة من 1 إلى 0.
    • انقر فوق موافق.

    لتعطيلك، يمكنك أيضا استخدام الجاهزة

    أرسل عملك الجيد في قاعدة المعارف بسيطة. استخدم النموذج أدناه

    سيكون الطلاب الطلاب الدراسات العليا، العلماء الشباب الذين يستخدمون قاعدة المعارف في دراساتهم وعملهم ممتنين لك.

    نشر على http://www.allbest.ru/

    1. المعلومات النظرية

    1.1 تطوير برامج تشغيل Windows Kernel

    معلومات نظرية موجز

    تطوير برامج تشغيل النواة

    برنامج التشغيل (من برنامج التشغيل الإنجليزي) هو برنامج كمبيوتر يحصل عليه برنامج آخر (عادة نظام التشغيل) الوصول إلى الأسلوب القياسي للأجهزة.

    تخطيطي، لإظهار كيف تعمل أنواع مختلفة من السائقين:

    مقسمة بشكل مريح إلى 2 أنواع:

    - برامج تشغيل Kernel (العمل على مستوى الامتيازات، ولكن لا تتفاعل مع أي برنامج مستخدم، ولا مع الجهاز. إنه منهم سنبدأ (يمكنهم أيضا الاستفادة منها أيضا).

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

    يتم إجراء مكونات kernel في وضع المعالج المميز (يسمى وضع kernel)، يمكن أن يؤدي كل شيء، وهي:

    - يمكنهم إجراء أوامر المعالج المميز (على سبيل المثال، LGDT)،

    - يمكن أن يكون الوصول إلى بيانات النظام والرمز،

    - الحصول على إمكانية الوصول المباشر إلى المعدات، مثل الموانئ

    - الحصول على الوصول إلى خلايا الذاكرة؛ لا يمكن للسائق معالجة الذاكرة المادية مباشرة، ولكن يمكنه الحصول على عنوان افتراضي لأي مادي ومعالجته.

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

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

    يتم استخدام DDK (طقم تطوير الجهاز) لكتابة واستكشاف أساليب تطوير السائق - النظام لتطوير برامج التشغيل.

    بالإضافة إلى الوثائق الموجودة في DDK، يتم تضمين مجموعة من الملفات المضمنة (* .inc) وملفات المكتبة (* .lib).

    وبالتالي، يدعم Windows أنواع مختلفة من برامج تشغيل الأجهزة، ولكن، بالإضافة إلى ذلك، هناك برامج تشغيل ليست برامج تشغيل للأجهزة، ولكن ببساطة تتيح لك إنشاء برامج ستعمل في Windows في وضع Kernel، I.E. على مستوى الامتيازات. في الوقت نفسه، فإنهم يصلون بالكامل إلى نظام التشغيل والمعدات.

    النظر في أكثر برنامج تشغيل وضع kernel الأكثر بسيطة.

    #تضمن.

    دون جاذبية (

    في pdriver_object pdriveroBject،

    في pusregtictrytrypath) (

    }

    نقطة الدخول هي DriverEntry، وهي مزينة في شكل إجراء يستضيف معلمين:

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

    pusregisterPath - مؤشر إلى مفتاح التسجيل الذي يحتوي على خيارات تهيئة برنامج التشغيل.

    يتم تحميل هذا السائق الأول لدينا فقط في النظام وتفريغها على الفور.

    ضع في اعتبارك الآن برنامج القالب الذي سيحتاج إلى استخدامه لتطوير برنامج في الخطوة الأولى من العمل بالدورة التدريبية (سائق وضع Kernel Preper.sys).

    تتمثل مهمة هذا السائق في تنفيذ ملاحظة واحدة على النظام ديناميكيا لأولاد أوكتاف الأول. للقيام بذلك، يستخدم برنامج التشغيل تعليمات المعالج داخل وخارج، والرجوع إلى منافذ الإدخال / الإخراج المقابلة. من المعروف أن الوصول إلى منافذ I / O هو مورد نظام Windows محمي مقدس. محاولة الاستئناف إلى أي منهم، كل من المدخلات والإخراج، من وضع المستخدم، يؤدي حتما إلى استثناء.

    في مثالنا، سيعمل المتحدث (لهذا الأمر، على وجه الخصوص، منفذ 61 ه، 0 و 1 بت، المنفذ 43h و 42 ساعة).

    في بداية السائق يعرف جميع الملاحظات ال 12.

    سيكون من الضروري عدم تشغيل المتكلم ببساطة، ولكن لتعيين تردد الصوت. يستخدم هذا النظام الفرعي الموقت يعمل بشكل مستقل عن المعالج ولديه 3 قنوات. يرتبط إخراج القناة 2 بالمتكلم، والذي يستخدم لتوليد صوت التردد المختلفة. جلسة الصوت المدى - 30 هرتز -6000 هرتز.

    لتعيين تردد الصوت إلى المنفذ 43H (سجل الموقت) 0BH يتم إرسال كلمة التحكم:

    mOV AL، 0BH

    خارج 43h، آل

    تحدد هذه القيمة رقم القناة الذي سنقوم بإدارته ونوع التشغيل ووضع القناة وتنسيق العداد.

    ثم يتم إرسال تردد الصوت الذي تم إعادة حسابه (1193167 / تردد (HZ)) إلى ميناء 42H (1193167 / التردد (HZ) (الجزء الأصغر سنا هو أولا، ثم الأقدم).

    على سبيل المثال، نريد الحصول على تردد الصوت 100 هرتز. إعادة حساب التردد

    1193167/100 = 11931

    ثم:

    mOV AX، 11931

    خارج 42h، آل

    موف آل، آه

    خارج 42h، آل

    في الخطوة الأولى من العمل، تحتاج إلى تغيير البرنامج بحيث يعطي أصوات موسيقية أخرى (كل خيار).

    في كثير من الأحيان، في المهام تحتاج إلى تعيين فترات مختلفة. للقيام بذلك، من المريح استخدام إجراء DO_DELAY، وعقده بشكل غير مباشر معلمة "وقت الصوت" المحدد.

    لجعلها مريحة لتصحيح برنامج تشغيل، هناك وسائل مختلفة. أبسط هي بشكل قاطع مع المعلومات اللازمة في النافذة الخاصة للأداة المساعدة Debug View. في السابق، يتم تشغيل هذا البرنامج، تم تكوينه لاعتراض الرسائل من Kernel. لعرض البرنامج، يتم استدعاء وظيفة DBGPrint، وجود معلمة واحدة - إخراج السلسلة. بعد بدء تشغيل برنامج التشغيل في نافذة عرض Debug، يتم عرض الإخراج بأكمله.

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

    للقيام بذلك، تحتاج إلى إنشاء تطبيق يقوم بتشغيل برنامج التشغيل. كيف؟ السائق هو خدمة مستوى النواة. لذلك، سيستخدم التطبيق إدارة تحكم خدمة SCM (إدارة التحكم في الخدمة)، والذي يتم تضمينه في Windows ويعمل على مستوى المستخدم.

    وبالتالي، من الضروري بناء حل من مشروعين: تطبيق وحدة التحكم والسائق.

    لتطوير السائقين معكم بحاجة إلى أن تكون مسبقا:

    - صك DDK،

    - تثبيت متغير بيئة WNETBASE (القيمة - المسار إلى DDK، على سبيل المثال، E: \\ Winddk \\ 3790.1830).

    يجب أن يكون المشروع مع برنامج التشغيل نوع Makefile.

    قم بإجراء إعدادات المشروع باستخدام إعدادات التطبيق وفي حقل سطر الأوامر Build لتسجيل سلسلة

    ddkbuild -wnetxp Chk. -Cez.

    ماذا التحدي المتمثل في نص خاص للاتصالات VC مع DDK

    يجب أن يحتوي المجلد الحالي للمشروع على ملفات:

    مصادر، makefile، ddkbuild.cmd (النصي)، برنامج تشغيل الملف المصدر

    بعد بناء مشروع، يجب أن يكون للسائق التمديد. SYS.

    التطبيق يطلق برنامج تشغيل Beeper.sys، I.E. يصفها في السجل، وتطلق العمل. ثم، بعد الانتهاء، يزيل من التسجيل.

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

    السائقين يصعب تصحيح الأخشاب. في حالة وجود أخطاء في العملية، غالبا ما تكون العملية تتجمد، وإعادة تشغيل مطلوبة. وللحرائق الخاصة بنا، بعد إعادة التشغيل، تحتاج أيضا إلى حذف خدمة Beeper06 من التسجيل باستخدام Regedit (HKEY_LOCAL_MACHINE \\ SYSTEMS \\ CurrentConlset \\ Services \\)، ثم إعادة التشغيل مرة أخرى.

    1.2 برامج تشغيل أجهزة Windows الافتراضية

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

    الآن سنقوم بتطوير برامج تشغيل للأجهزة التي تنقل البيانات إلى وظهرها بين تطبيق المستخدم والجهاز.

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

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

    عندما يتطلب التطبيق عملية / تشغيل، فإن سائق الاستئناف. هذا يمكن أن تستخدم من قبل ما يسمى. واجهة IOCTL (التحكم في الجهاز).

    يؤدي تطبيق الاتصال الإجراءات التالية:

    1) فتح الملف واستقبال واصفها:

    generic_read + generic_write، 0، null، open_existing، 0، null

    نتيجة لذلك، إذا حدث كل شيء بنجاح، نحصل على واصف الجهاز.

    2) إرسال برنامج تشغيل محرك الأقراص الصلبة (ما يجب القيام به، يمكن للسائق تنفيذ العديد من الإجراءات المختلفة):

    استدعاء DiagioControl، واصف، رمز الحركة، عنوان المخزن المؤقت للإدخال، حجم بيانات الإدخال، عنوان المخزن المؤقت الإخراج، حجم الإخراج، عنوان المخزن المؤقت لعدد حقيقي من البايتات

    3) إغلاق الملف، وبالتالي، فإن إطلاق الواصف.

    استدعاء واصف جهاز closehandle

    لنحيل البيانات، يجب أن توافق على البيانات (التطبيقات والبريد) على بروتوكول التفاعل (رموز العمل، هيكل المخازن المؤقتة - المدخلات والإخراج).

    يتم استخدام رمز الإجراء نفسه أيضا في التطبيق، وفي برنامج التشغيل.

    يمكن تسجيل رمز الإجراء في التطبيق وفي برنامج التشغيل في نموذج 16 أضعاف، ويمكنك استخدام ماكرو CTL_Code، كما يتم ذلك في مثال المختبر. يعمل في ملف common.inct.

    النظر في مثال على رمز الإجراء من برنامج تشغيل الجهاز الظاهري، والذي يستخدم في العمل المختبري. الاسم - Ioctl_get.

    في حالة وجود جهاز افتراضي، فإن علامة الملف هي 0.

    نوع الجهاز - file_device_unknown \u003d 22 ساعة

    حقوق الوصول - file_read_access + file_write_access \u003d 1 + 2 \u003d 3 \u003d 11B

    رمز وظيفي - في النطاق من 800h إلى FFFH. لدينا 800 ساعة.

    طريقة المخزون - طريقة نقل البيانات بين التطبيق والسائق (ثلاثة):

    بالنسبة إلى كمية صغيرة من البيانات، عادة ما يتم استخدامه الطريقة (00b) - يتم تمييز مخزن مؤقت إضافي في ذاكرة كافية، كافية لوضع المخزن المؤقت الإدخال والإخراج. يقع عنوان هذا المخزن المؤقت في IRP في حقل ObsterIrP.SystemBuffer. يفترض مرسل الإدخال / الإخراج نفسه تشغيل بيانات إعادة كتابة البيانات بين المستخدم والمخزن المؤقت الإضافي.

    الوصول المباشر للبيانات (بدون المخزن المؤقت) - method_out_direct (2) - للإخراج إما METOD_IN_DIRECT (1) - للمدخل؛ الحقل من IRP - mdladdress. هذه مكالمة مباشرة - يقوم مدير الإخراج بإصلاح الصفحات الفعلية التي تحتوي على المخزن المؤقت وضع المستخدم. في الوقت نفسه، يقوم بإنشاء هيكل إضافي ل MDL (قائمة واصف الذاكرة) لوصف الصفحات الثابتة. ويعمل مطور السائق مع MDL.

    الوصول من خلال المخزن المؤقت لمستخدم المستخدم - طريقة (3)؛ الحقل من IRP - SystemBuffer. يرسل I / OFF Respatcher العنوان الظاهري لوضع المستخدم إلى برنامج التشغيل. وفي السائق، تحتاج إلى العمل بعناية فائقة، لأن السائق في هذه الحالة يجب أن تعمل فقط في سياق المتصل.

    عندما يرسل التطبيق برنامج تشغيل رمز الإجراء، يبدأ برود I / O. إنها مسؤولة عن إنشاء حزمة استعلام I / O (I / O طلب حزمة، IRP) وإرسالها إلى برنامج التشغيل لمزيد من المعالجة.

    سننظر في 3 أنواع من الطلبات:

    سيتم نقل IRP_MJ_CREATE - مع CreateFile،

    IRP_MJ_DEVICE_CONTROL - سيتم إرسالها مع DeviceioControl

    IPR_MJ_CLOSE - مع closehandle

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

    في كل مكدسة موضعية هناك مؤشر إلى كائن DeviceObject وإلى كائن FileObject الذي يتم فيه بدء الاستعلام. يتم تخزين حزم IRP دائما في ذاكرة لا تطاق.

    يتم إنشاء الكائنات التالية لعملية التشغيل وتطبيق:

    كائن سائق

    كائنات الأجهزة؛

    مراحل عملية السائق.

    1) إنشاء كائن سائق. تم إنشاؤها عند تحميل برنامج التشغيل في مرحلة البداية. في هذه اللحظة، تبدأ وظيفة DriveReentry ويتم شغل صفيف الوظائف، بالإضافة إلى مؤشر كائن الجهاز والظهر.

    يشمل الجهاز:

    نوع الجهاز.

    2) إنشاء رابط رمزي للجهاز. من أجل أن تكون كائن "الجهاز" متاحا لرمز وضع المستخدم، يجب أن ينشئ برنامج التشغيل في دليل المستخدم في وضع المستخدم (وضع المستخدم) "\\ ؟؟؟" كائن آخر هو رابط رمزي (رابط رمزي). يقوم برنامج تشغيل Shablon.sys بإنشاء الرابط الرمزي Slshablon على جهازه "devshablon" في الدليل "\\ ؟؟"، فإن القيمة التي هي "\\ device \\ devshablon".

    وبالتالي، بالفعل عند تحميل برنامج التشغيل (في حالتنا، في مرحلة تنزيل OS)، لدينا ثلاث كائنات في الذاكرة: برنامج التشغيل "\\ Driver \\ Shablon"، الجهاز "\\ Device \\ Shablon" ورابط رمزي للجهاز " \\ ؟؟ \\ slshablon ".

    3) الافتتاح. علاوة على ذلك، عندما يبدأ التطبيق، يتم استدعاء CreateFile. هناك رابط للجهاز. من هيكل جهاز Device_Object، يتم استرداد المعلومات معلومات حول محرك الخدمة. يشكل المرسل I / O نوع الحزمة لاستعلام I / O IRP IRP_MJ_CREATE وتوجيهه إلى القيادة. لذلك يتعلم برنامج التشغيل أن رمز وضع المستخدم يحاول الوصول إلى جهازه. إذا كان السائق ليس لديه أي شيء ضد، فسيعود رمز النجاح. يحتوي برنامج التشغيل الخاص بنا على إجراء إرسال خاص يستجيب لهذا IRP - DispatchcleoseClose (هناك إجراء مشترك لفتح الجهاز وإغلاقه). يتم نقل حقل IO.Status.status عن طريق Status_success، وفي Io.Status.information - 0، ل في هذه الحالة، لا يوجد شيء يحتاج إلى إرساله. مثل هذا الرد من برنامج التشغيل هو إشارة إلى المرسل الكائن لإنشاء ملف افتراضي. في الوقت نفسه، يتم إنشاء عنصر جديد مع مؤشر كائن "ملف" في جدول واصف (جدول المقبض)، ويتم إرجاع واصف جديد إلى وضع المستخدم.

    إذا كان كل شيء على ما يرام، فنحن نقوم بحفظ واصف الملفات، وإرجاع CreateFile، في متغير HDEvice.

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

    باستخدام واصف الجهاز، سيحصل إرسال I / O على معلومات حول برنامج تشغيل الخدمة، وسوف تشكل حزمة من نوع استعلام I / O IRP_MJ_DEVICE_CONTROL وتوجيهها إلى القيادة. سيتسبب في إجراء برنامج التشغيل المقابل، الذي يتم إرسال رمز الإجراء ومعلومات حول عناوين وحجم المخزن المؤقت الإدخال والمخرجات كمعلمات. كل هذا ينتقل عبر IRP. يأخذ إجراء IRP المعلومات اللازمة: رمز الإجراء، وعنوان مخزن مؤقت للبيانات.

    يؤدي إجراء DispatchControl الإجراءات اللازمة، في حالتنا عنوان حزمة IRP من سجل ESI، ثم ينقل النتيجة عبر المخزن المؤقت الإخراج إلى التطبيق.

    على غرار الإجراء السابق، تمر عبر حالة إنهاء IRP وعدد البايتات التي يتم نقلها من برنامج التشغيل.

    في التطبيق، يتم تنسيق هذه البيانات وإخراجها.

    5) إغلاق. كما يجب أن تعامل مع الواصفات، لم تعد هناك حاجة إليها، استدعاء وظيفة Closehandle، إغلاق واصف الجهاز.

    6) تفريغ سائق. حذف رابط رمزي وحذف كائن الجهاز.

    يتكون مجمع (2) من برنامجين:

    التطبيق الذي يشير إلى برنامج التشغيل خلف عنوان IRP، ثم يعرض هذا العنوان النوافذ إلى النافذة القياسية.

    shablon.sys - سائق.

    لا يفعل برنامج تشغيل Shablon على مستوى المستخدم، في هذه الحالة يحدد محتويات تسجيل ESI أثناء السائق.

    يتلقى التطبيق في المخزن المؤقت الإخراج محتويات ESI، وتحويله إلى الإخراج في السداسي عشري ويعرض النوافذ إلى النافذة القياسية.

    إذا كنت بحاجة إلى تلقي معلومات من CMOS في برنامج التشغيل، فستكون مطلوبة:

    إرسال إلى المنفذ 70h تعويض في CMOS، التي تهمنا؛

    تأخير منخفض

    خذ من معلومات المنفذ 71 ه في آل.

    ثم اكتب هذه المعلومات في المخزن المؤقت الإخراج.

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

    في هذا العمل المختبر، يفترض أن برنامج التشغيل مثبت باستمرار في Windows باستخدام ملف .inf باستخدام العنصر لتثبيت الجهاز من لوحة التحكم: إضافة جهاز جديد، قم بتثبيتها يدويا، قم بتثبيت جميع الأجهزة، حدد file.inf (يجب أن يكون برنامج التشغيل في نفس المجلد).

    للتحقق من تعيين برنامج التشغيل، حدد النظام والمعدات وأدير الجهاز في لوحة التحكم.

    1.3 الوصول إلى برامج التشغيل الحالية من تطبيقات نظام المستخدم

    خوارزمية تطبيق السائق العمل مع السائق

    للعمل مع برنامج تشغيل السائق، تحتاج إلى الحصول على برنامج تشغيل مناور (مقبض). يمكن الحصول على هذه المناور باستخدام وظيفة API CreateFile أو CreateFielea التي تعمل مع أحرف ASCII. يستخدم كذلك وظيفة API Deviceiocontrol، والتي، كواحدة من المعلمات، يتم إرسال رمز IOCTL. رمز IOCTL هو رمز إدارة سيتعلم برنامج التشغيل مع العملية، وطلب تنفيذ التطبيق، وسيلة نقل المعلمات وحقوق الوصول إلى أن التطبيق مطلوب لإجراء هذه العملية. بعد التطبيق الناجم

    يتم إرسال محرك Deviceiocontrol IRP_MJ_DEVICE_CONTROL. بعد اكتمال المعالجة، ترجع طلبات التطبيقات الإدارة وتبقى التطبيق لتحليل استجابة السائق وإغلاق الواصفات المفتوحة.

    مثال

    في المثال أدناه، يرسل تطبيق وضع المستخدم برنامج تشغيل نظام الملفات IOCTL_DISK_GET_PARTITITITION_INFO_EX QUERY_EX، وتحليل المعلومات المستلمة وتعرض تنسيق قسم القرص الثابت.

    #تضمن.

    #تضمن.

    int _tmain (int argc، _tchar * argv)

    dware dwebytesreturned \u003d 0؛

    char cpartitionstyle \u003d (0)؛

    Partition_Information_EX PipartitionInfo؛

    التعامل مع hdevice \u003d createfilea (

    /*1*/2/TINENILIC: "،

    / * 2 * / generic_read | generic_write.

    / * 3 * / file_share_read | file_share_write،

    / * 5 * / open_existing،

    إذا (HDEvice \u003d\u003d Invalid_handle_Value)

    MessageBoxa (NULL، خطأ Createfilea! "،" خطأ "، 0)؛

    إذا (deviceioControl (

    / * 1 * / (مقبض) HDEvice،

    / * 5 * / & pipartitionInfo،

    / * 6 * / sizeof (pipartitionInfo)،

    / * 7 * / & dwbytesreturned،

    إذا (pipartitionfo.partitionstyle \u003d\u003d partition_style_mbr)

    MessageBoxa (NULL، "Partition_Style_mbr"، "التسمية التوضيحية"، 0)؛

    آخر إذا (pipartitionfo.partitionstyle \u003d\u003d partition_style_gpt)

    MessageBoxa (NULL، "Partition_Style_gpt"، "التسمية التوضيحية"، 0)؛

    messageBoxa (NULL، "Partition_Style_raw"، "التسمية التوضيحية"، 0)؛

    MessageBoxA (NULL، خطأ DEVIECTIONTROL "،" خطأ "، 0)؛

    Closehandle (HDEvice)؛

    ضع مثال على ذلك

    يتم الإعلان عن المتغيرات اللازمة للتطبيق. Partition_Information_EX هو بنية تصف المعلومات حول قسم القرص الثابت.

    بنية TypeDef (

    ) partition_information_ex؛

    في هذا الجزء من البرنامج، يتم استدعاء وظيفة CreateFielea لتلقي مناور، والذي يتم كتابته إلى متغير HDEVICE.

    يتم استدعاء وظيفة deviceioconlol بشكل متزامن. تنتقل:

    جهاز واصف

    IOCTL Code Ioctl_disk_get_partition_info_ex؛

    مؤشر إلى المخزن المؤقت الإدخال، لاغيا في حالتنا؛

    حجم المخزن المؤقت المدخلات؛

    فهرس على المخزن المؤقت الإخراج؛

    حجم المخزن المؤقت الإخراج؛

    مؤشر إلى متغير نوع DWORD حيث سيتم تخزين عدد البايتات المرتجعة؛

    المؤشر إلى الهيكل المتداخلة، والذي يستخدم لاستدعاء وظيفة غير متزامنة.

    بعد إرجاع عنصر التحكم، في حالة الانتهاء بنجاح من الوظيفة، في بنية Partition_information_EX، يتم تخزين القسم.

    يتم التحليل والإخراج. قبل إرجاع إدارة نظام التشغيل، يمكنك إغلاق الواصفات المفتوحة. يتيح لك ذلك إجراء ميزة Closehandle (__ في مقبض). إذا لم تغلق الواصفات، فسيجعل ذلك نظام التشغيل لك.

    2. أداء الدورات الدراسية

    2.1 الخطوة 1.

    المهمة: 1. قم بتطوير برنامج تشغيل kernel مع الوصول إلى المنافذ، وأداء الإجراءات وفقا لخيار وإخراج المعلومات إلى نافذة عرض التصحيح (اختياري)، بالإضافة إلى تطبيق يقوم بتشغيل برنامج التشغيل.

    سرد kurs_test.cpp.

    #include "Stdafx.h"

    #include "windows.h"

    #include "stdlib.h"

    sc_handle hscmanager؛

    sc_handle hservice؛

    char acdriverpath؛

    إذا كان (hscmanager! \u003d 0) (

    // تسجيل اللاعب في جدول المرسل Scmanager

    إذا (hservice! \u003d 0) (

    / / حذف سجل برنامج التشغيل

    deleteservice (hservice)؛

    CloseServicehandle (HService)؛

    العودة 0؛

    }

    قائمة Beeper.sys.

    #تضمن.

    # define timer_frequency 1193167 //1193،167 هرتز

    # define pitch_c 523 // 523،25 هرتز

    # define pitch_cs 554 // 554،37 هرتز

    # define pitch_d 587 // 587،33 هرتز

    # define pitch_ds 622 / 622،25 هرتز

    # define pitch_e 659 / 659،25 هرتز

    # define pitch_f 698 //698،46 هرتز

    # define pitch_fs 740 //739،99 هرتز

    # define pitch_g 784 // 783،99 هرتز

    # define pitch_gs 831 // 830،61 هرتز

    # define pitch_a 880 //880.00 هرتز

    # define pitch_as 988 / 987،77 هرتز

    void do_delay (الوقت الدولي) (

    منذ فترة طويلة، ي؛

    ل (i \u003d 0؛ أنا<=time*0xfffff; i++) {}

    }

    void do_big_delay (الوقت الدولي) (

    do_delay (2 * الوقت)؛

    }

    الفراغ إكسيليفون (int npitch) (

    int ntone \u003d timer_frequency / npitch

    _اسم (

    mOV AL، 10110110B؛ // تسجيل كلمة تحكم في 43h

    خارج 43h، al؛ // قناة التحكم في الصوت - مخطط المنطق باستخدام بتونج توقيت ونظام نظام التحكم بالبرمجيات

    mOV EAX، NTONE؛ // تسجيل التردد المعاد التكرار في 42

    خارج 42h، al؛ // كبار

    موف آل، آه؛ // جونيور

    خارج 42h، آل

    في Al، 61H؛ // تغيير تسلسل التحكم - تحويل البتات الأخيرة لكل وحدة

    ؛ // بت 0 - تصريح استخدام المتكلم

    ؛ // بت 1 - تصريح الاتصال الموقت-2 إلى المتكلم

    أو، 00000011B؛ المتكلم على.

    خارج 61h، آل

    }

    do_delay (0x7f)؛

    _اسم (

    في Al، 61H

    و، 11111100B المتكلم قبالة.

    خارج 61h، آل

    }

    }

    إكسيليفون (pitch_c)؛

    إكسيليفون (pitch_s)؛

    إكسيليفون (pitch_s)؛

    إكسيليفون (pitch_s)؛

    إكسيليفون (pitch_s)؛

    إكسيليفون (pitch_s)؛

    إكسيليفون (pitch_s)؛

    عودة Status_device_configuration_error؛

    }

    2.2 الخطوة 2.

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

    يعرض التطبيق النتيجة في نافذة Windows القياسية.

    قائمة shablon.c.

    #تضمن. // تعريفات NT المختلفة

    #تضمن.

    unicode_string g_usdevicename؛

    unicode_string g_ussymboliklinkname؛

    تحميل DriverUnload (في PDRIVER_OBJECT PDRIVEROBJECS) (

    iodeletesymboliclink (& g_ussymboliclammname)؛

    IodeletEdevice (PDRiverObject-\u003e DeviceObject)؛

    }

    NtStatus DespathcleateClose (Pdevice_Object PdeviceObject، Pirp Pirp) (// mj_create mj_close المعالجة

    pirp-\u003e iostatus.status \u003d status_success؛

    pirp-\u003e iostatus.information \u003d 0؛

    IOCOLPLETEREQUEST (PIRP، IO_NO_INCREMENT)؛

    عودة الحالة_success؛

    }

    NtStatus Dispatchcontrol (Pdevice_Object PdeviceObject، Pirp Pirp) (/ / معالجة IRP_MJ_DEVICECONTROL

    حالة ntstatus

    int regesi؛

    // خذ مؤشر إلى io_stack_location، في ذلك على IOCONTROLCODE

    إذا كان (pirp-\u003e tail.overlay.currentstack الموقع-\u003e parameters.deviceiocontrol.iocontrolcode \u003d\u003d IOCTL_GET) (

    // مقارنة قانون العمل وإذا كان عميلنا، ثم:

    _اسم (

    mOV EAX، 0

    mOV AL، 10H

    خارج 70h، آل

    في Al، 71H

    cBW.

    cWDE.

    mOV REGESI، EAX

    }

    // هذه هي وظائفنا - نأخذ محتويات سجل ESI

    // اكتبها إلى المخزن المؤقت للنظام

    * ((INT *) PIRP-\u003e outdownirp.systembuffer) \u003d Regesi؛

    pirp-\u003e iostatus.information \u003d 4؛ // وتعيين حجم النتيجة

    الحالة \u003d status_success؛

    ) حالة أخرى \u003d status_invalid_device_request؛

    pirp-\u003e iostatus.status \u003d الحالة؛

    IOCOLPLETEREQUEST (PIRP، IO_NO_INCREMENT)؛

    العودة (الحالة)؛

    }

    driverentry الدولي (في PDRIVER_OBJECT PDRIVEROBJECT، في Pusricode_string PusregisterPath) (

    حالة ntstatus

    Pdevice_Object PdeviceObject؛

    / / تهيئة صفوف يونيكود

    Rtlineitunicodestring (& g_usdevicename، l "\\\\ device \\\\ devget")؛

    Rtliniticodestring (& g_ussymboliklinkname، l "\\\\ ؟؟ \\\\ sldevget")؛

    / / املأ كائن السائق - بضيق شرح السائق الذي يضم ما العمليات

    pdriverobject-\u003e driverunload \u003d

    pdriviverobject-\u003e mearfunction \u003d

    pdriviverobject-\u003e mearfunction \u003d

    pdriviverobject-\u003e mearfunction \u003d

    / / قم بإنشاء كائن منطقي لجهاز افتراضي

    الحالة \u003d iocreatevice (pdriveribject، 0، & g_usdevicename، file_device_1nnown، 0، false، & pdeviceobject)؛

    إذا (! NT_SUCCESS (الحالة)) (حالة الإرجاع؛)

    / / قم بإنشاء رابط رمزي للجهاز

    الحالة \u003d iocreatesesymboliclink (& g_ussymbolicname، & g_usdevicename)؛

    إذا (! NT_SUCCESS (الحالة)) (

    IodeletEdevice (PdeviceObject)؛

    عودة الحالة؛

    }

    عودة الحالة؛

    }

    سرد Course2.cpp.

    #include "Stdafx.h"

    #include "windows.h"

    #include "stdlib.h"

    # define ioctl_get ctl_code (file_device_unknown، 0x800، method_buffered، file_read_access + file_write_Access)

    int _tmain (int argc، _tchar * argv) (

    التعامل مع hdevice

    بوول ديفكونترول

    DWORD DWBYETESTEDESTED.

    شار ستروكا؛

    /*

    المعلمات:

    lPFILENAME عنوان سلسلة النتيجة Null التي تحدد اسم الكائن لإنشاءه أو فتحه.

    dwdesIrdaccess نوع البضائع إلى الكائن. هذه المعلمة يمكن أن تأخذ أي مجموعة من القيم التالية:

    معنى: الوصف:

    0 يحدد طلب لتوفر كائن على الجهاز المحدد. يمكن للتطبيق طلب سمات الجهاز دون الوصول إليه.

    يحدد GENECTIC_READ الوصول إلى القراءة من الكائن. يمكن قراءة البيانات من الملف ويمكن نقل مؤشر الملفات. تتحد مع generic_write للوصول إلى القراءة والكتابة.

    يحدد GENTIC_WRITE الوصول إلى كائن. يمكن تسجيل البيانات في ملف ومؤشر ملف يمكن نقله. تتحد مع generic_read للوصول إلى القراءة والكتابة.

    dwsharemode وضع الوصول المشترك إلى الكائن. مع القيم الصفرية، لا يمكن استخدام الكائن مع العديد من البرامج. ستفشل جميع عمليات التشغيل اللاحقة للكائن حتى يتم إغلاق واصف الكائن. لمشاركة الكائن، استخدم مجموعة من القيم التالية:

    معنى: الوصف:

    يسمح file_share_delete بتسلسل العمليات المفتوحة للكائنات لطلب الوصول إلى الإزالة.

    يسمح File_Share_Read بتسلسل عمليات فتح لطلب الوصول للقراءة.

    file_share_Write يسمح تسلسل العمليات الافتتاحية لطلب إدخال

    lpsecurityattributes عنوان الأمن Security_Attributes، والذي يحدد ما إذا كان يجب تورط الواصف الذي تم إرجاعه بواسطة الدالة أم لا.

    إذا كان LPSecurityAtatributes تساوي NULL، لا يمكن تورث الواصف.

    dwcreationdisposition.

    معنى: الوصف:

    Create_always يخلق ملف جديد، دائما.

    إذا كان الملف موجود، فإن الوظيفة الكتابة فوق الملف.

    create_new يخلق ملف جديد. سيتم الانتهاء من الوظيفة مع وجود خطأ إذا كان الملف موجودا.

    فتح الملفات المفتوحة، دائما. إذا لم يكن الملف موجودا، فإن الوظيفة تنشئها بنفس الطريقة إذا كان DWCREATEEDEDEPPERION سيقوم بإجراء عملية إنشاء_ الجديدة.

    Open_Existing يفتح الملف. سيتم الانتهاء من الوظيفة مع وجود خطأ إذا كان الملف غير موجود.

    truncate_existing يفتح الملف ويقطعه إلى حجم الصفر. سيتم الانتهاء من الوظيفة مع وجود خطأ إذا كان الملف غير موجود.

    dwflagsandattributes الأعلام وسمات الملفات.

    عند فتح ملف موجود، يتجاهل CreateFile ملف القالب.

    قيم العودة:

    إذا كانت الوظيفة ناجحة، يتم إرجاع المقبض المفتوح للملف المحدد. إذا كان الملف المحدد موجود قبل استدعاء الوظيفة ومعلمة DWCREATEDEPPOSPOSPPOSE تساوي CREATE_ALYS أو OPEN_ALWARE، فسترجع مكالمة GetLasterRor Error_alReady_Exists، حتى لو كانت الوظيفة ناجحة. إذا كان الملف غير موجود قبل الاتصال، فسيعود GetLastterror 0 (صفر).

    في حالة الخطأ، ستعود الوظيفة Invalid_handle_Value. لمزيد من معلومات الخطأ، اتصل GetLasterror.

    */

    إذا (hdevice! \u003d 0) (

    /*

    hDEvice هو مقبض، بنيت CreateFile "أوم.

    dwiocontrolcode هي قيمة تحدد المعتمة التي يجب تنفيذها.

    lpinBuffer هو بوفير لاصق، يتم توفيره من خلال البيانات المطلوبة لإجراء العملية المحددة في Dwiocontrolcode. إذا كان Oparation لا يتفوق على البيانات، يمكنك نقل NULL.

    ninbuffersize هو pazmp في بايت البيانات في باقة، والتي تحدد lpinbuffer عليه.

    lPoutbuffer هو بوفير لاصق، والتي سيتم إصدارها عن طريق الإخراج عند محتجز الاشعال بنجاح. إذا لم يحدد Oparation الإخراج، فيجب أن يكون هذا الحقل فارغا ".

    noutbuffersiz هو pazmp في بايت دلو، والتي يشير lpoutbuffer إليها.

    lpbytesreturned - ADPES من نوع النسب DWORD، والتي ستتلقى بيانات عن البيانات المضمنة في LPOUTBuffer.

    lpoverlapped هو تتراكب Strupp، إذا كنت تريد أن تكون العملية Asynchon. إذا كنت ترغب في الانتظار حتى يتم تنفيذ OP، ضع NULL في هذا الحقل.

    */

    wsprintf ((LOSTR) Stroka، "٪ X"، AdWoutbuffer)؛ // سلسلة السجل في المخزن المؤقت (Adwoutbuffer -\u003e Stroka)

    Closehandle (HDEvice)؛

    العودة 0؛

    }

    برنامج الكمبيوتر الأساسية للسائق

    2.3 الخطوه 3.

    قائمة الدورات .CPP.

    #تضمن.

    #تضمن.

    #تضمن.

    {

    DWORD غير المرغوب فيه؛

    0، // سمات الملف

    عودة كاذبة)؛

    }

    0، // حجم المخزن المؤقت الإدخال

    Closehandle (HDEvice)؛

    العودة (بريسولت)؛

    }

    int Main (Int Argc، Char * Argv)

    {

    /*

    بنية TypeDef (

    Partition_Style PartitionStyle؛ // تنسيق القسم

    بدء تشغيل كبير؛ / / إزاحة قسم البداية

    Large_integer Partitionlength؛ // حجم القسم

    DWORD PartitionNumber؛ // رقم المقطع

    rewritepartition منطقية؛ // إذا تم الكتابة فوق القسم صحيحا

    اتحاد (

    partition_information_mrb mbr؛ // معلومات إضافية قسم نمط MBR

    partition_information_gpt gpt؛ // معلومات إضافية قسم نمط GPT

    };

    ) partition_information_ex؛

    */

    bool bresult؛

    النظام ("وقفة")؛

    العودة ((INT) بريستت)؛

    }

    2.4 الخطوة 4.

    1) الجمع بين جميع الوظائف المصممة في الخطوات 1-3، في مجمع برنامج واحد.

    يجب أن تبدو المجمع النهائي هكذا:

    - سائقنا مضمن في النظام وتحميله في مرحلة التمهيد ويندوز.

    - يطلب التطبيق من برنامج تشغيل برنامج التشغيل (المحدد في الخطوة 2)، يقوم برنامج التشغيل بإرسال هذه المعلومات، ويتم تشغيل المتكلم أيضا لفترة من الوقت ويتم تشغيل اللحن (محدد في الخطوة 1). ثم يتطلب التطبيق برنامج تشغيل موجود في النظام (وفقا للخيار إلى الخطوة 3).

    2) تقديم مذكرة توضيحية يجب أن توصف فيها جميع المراحل الأربعة، وكذلك المعلومات النظرية لكل مرحلة.

    #include "Stdafx.h"

    #include "windows.h"

    #include "stdlib.h"

    # define ioctl_get ctl_code (file_device_unknown، 0x800، method_buffered، file_read_access + file_write_Access)

    Bool GetPartitionNumber (Partition_Information_EX * PEX)

    {

    التعامل مع hdevice // واصف الجهاز يجري التحقق

    bool bresult؛ / / خانة الاختيار

    DWORD غير المرغوب فيه؛

    hDEvice \u003d CreateFile (النص ("\\\\\\\\. \\\\ C:")، // فتح الجهاز

    generic_read | generic_write، // الوصول إلى الجهاز

    file_share_read | file_share_write، // وضع المشاركة

    null، // سمات الأمان افتراضيا

    Open_Existing، // الموقع

    0، // سمات الملف

    باطل)؛ // لا تنسخ سمات الملف

    إذا (HDEvice \u003d\u003d Invalid_handle_Value) (// غير قادر على فتح الجهاز

    printf ("createfile () فشل! \\ n")؛

    عودة كاذبة)؛

    }

    bresult \u003d deviceiocontrol (HDEvice، // الجهاز المطلوب

    ioctl_disk_get_partition_info_ex، // العملية

    null، // مؤشر إلى المخزن المؤقت الإدخال

    0، // حجم المخزن المؤقت الإدخال

    pEX، SIFEOF (* PEX)، // الناتج العازلة

    & غير المرغوب فيه، / عدد البايتات المعادة

    (lpoverlapped) null)؛ // i / o المزامنة (I / O)

    Closehandle (HDEvice)؛

    العودة (بريسولت)؛

    }

    int _tmain (int argc، _tchar * argv) (

    sc_handle hscmanager؛

    sc_handle hservice؛

    char acdriverpath؛

    التعامل مع hdevice

    بوول ديفكونترول

    DWORD DWBYETESTEDESTED.

    lpvoid adwinbuffer، adwoutbuffer؛

    شار ستروكا؛

    Partition_Information_EX PEX؛ // هيكل الجهاز

    bool bresult؛

    hDEVICE \u003d CreateFile ("\\\\\\\\. \\\\ Sldevget"، Generic_read + Generic_Write، 0، NULL، OPEN_EXISTING، 0، NULL)؛

    إذا (hdevice! \u003d 0) (

    DevControl \u003d deviceiocontrol (HDEVICE، IOCTL_GET، & ADWINBUFFER، SIFEOF (ADWINBUFFER)، & ADWOUTBUFFER، SIFEOF (ADWOUTBUFFER)، & DWBYTesretured، NULL)؛

    إذا ((devcontrol! \u003d 0) && (dwbytesreturned! \u003d 0)) (

    wsprintf ((LOSTR) Stroka، "٪ X"، AdWoutbuffer)؛ // سلسلة السجل في المخزن المؤقت (Adwoutbuffer -\u003e Stroka)

    إذا (Stroka \u003d\u003d "00000100") messageBox (null، "وجدت 1.44 ميغابايت"، "yermakov fdd scaner"، mb_ok)؛

    آخر MessageBox (NULL، غير موجود "،" Yermakov FDD Scaner "، MB_OK)؛

    hscmanager \u003d openscmanager (null، null، sc_manager_create_service)؛

    إذا كان (hscmanager! \u003d 0) (

    getfullpathname ("beeper.sys"، sizeof acdriverpath، acdriverpath، null)؛

    / / تسجيل الموسيقي في جداول SCM

    hsrvice \u003d createservice (hscmanager، "beeper11"، "nice melody beeper11"،

    Service_Start + Delete، Service_Kernel_Driver، Service_Demand_Start،

    service_error_ignore، acdriverpath، null، null، null، null، null)؛

    إذا (hservice! \u003d 0) (

    StartService (Hservice، 0، NULL)؛

    deleteservice (hservice)؛

    CloseServicehandle (HService)؛

    ) آخر messageBox (NULL، "يمكن" تسجيل برنامج التشغيل "، null، mb_iconstop)؛

    CloseServiceHandle (HSCManager)؛

    ) آخر messageBox (NULL، "يمكن" الاتصال ب Scmanager "، NULL، MB_ICONSTOP)؛

    ) آخر messageBox (null، "يمكن" إرسال رمز التحكم "، null، mb_ok)؛

    Closehandle (HDEvice)؛

    ) آخر messageBox (null، dev غير موجود "، null، mb_iconstop)؛

    bresult \u003d getpartitionnumber (& pex)؛

    إذا (bresult) (printf ("partitionnumber \u003d٪ d \\ n"، pex.partitionnumber)؛

    ) آخر (printf ("getpartitionnumber () فشل. خطأ٪ d. \\ n"، getlasterror ())؛

    النظام ("وقفة")؛

    العودة ((INT) بريستت)؛

    }

    3. طلب وظيفي

    الشكل 3.1. سائق من الخطوة 2

    الشكل 3.2. الخطوة 3 سائق

    نشر على Allbest.ru.

    وثائق مماثلة

      آليات تفاعل وضع kernel وتطبيق المستخدم: هندسة محرك الأقراص متعدد الطبقات، خوارزمية مختبئة البيانات، سائق وتفاعل التطبيقات، واجهة المستخدم وصول الملفات إلى الملفات.

      العمل بالطبع، وأضاف 06/23/2009

      نظام التشغيل Windows NT I / O بنية. منظمة حافلات USB الداخلية. الخصائص الأساسية لنموذج محرك WDM. نقاط تسجيل الدخول من برنامج التشغيل المتقدمة، وضع رمز في الذاكرة، وتركيب السائق في النظام. تنفيذ رمز السائق في C.

      الدورات الدراسية، وأضاف 09/27/2014

      بنية وضع المستخدم يوفر القدرة على استخدام المستخدم للتفاعل مع النظام. وصف وضع kernel، والذي يضمن التنفيذ الآمن للتطبيقات (البرامج) للمستخدم. ويندوز nt تجريد الأجهزة.

      عرض تقديمي، وأضاف 23.10.2013

      نواة ويندوز 98. دور وحدات النواة 16 بت. مشاكل الأداء. التعاونية والتضحيات تعدد المهام. تحسين استخدام الموارد في نظام التشغيل Windows 98. باستخدام WordArt. MS Outlook Express: إنشاء وإرسال الرسائل.

      الفحص، وأضاف 14.04.2005

      الأداء المشترك لجميع أجهزة الكمبيوتر والوصول إلى موارده. مفهوم ووظيفة نظام تشغيل الرسومات Windows. مكتب مساعدة ويندوز. إدارة نظام الملفات. التكنولوجيا "التوصيل والتشغيل". واجهة Windows الرسومية.

      اختبار العمل، وأضاف 01/22/2011

      خصائص نظام التشغيل. تاريخ تطوير النوافذ. الإصدار المقارن من إصدارات Windows. عناصر وأدوات Windows XP. برامج التطبيق في نظام التشغيل Windows XP. سطح مكتب العمل وأجهزة الكمبيوتر المحمولة التي تعمل بنظام Windows.

      تقرير، وأضاف 10/16/2011

      باستخدام برنامج تشغيل وضع التحكم في وضع Kernel لإنشاء مؤشرات ترابط النظام. تقليد معالجة البيانات وتنظيم التأخير. تطوير سائق في C ++. تكوين مقعد اختبار. دقة تغيير التأخير والعمل الموقت.

      العمل بالطبع، وأضاف 24.06.2009

      Domilіzhenna ويندوز هيكل النوافذ الداخلية. الهندسة المعمارية NT هيكل النواة. طرق إعادة بناء Funkii في نظام نواة نظام القرار. قلل من السائق. حزمة الإدخال - فيلود. otsіnka stap_lnosti tu أنظمة ويندوز.

      وأضاف الدورات الدراسية، وأضاف 02.01.2014

      مفهوم وأنواع وعمل جدار الحماية. مدمج في ويندوز جدار حماية. Windows XP SP2، والوصول إلى إعدادات جدار حماية حزمة خدمة Windows XP 2. نظام التشغيل Windows Vista، وحركة المرور المسموح بها. ويندوز 7، إعدادات لمحات نشطة. جدار الحماية الشخصي، مستويات الاختبار.

      مجردة، وأضاف 11/19/2010

      التعارف بالخصائص التقنية لجهاز كمبيوتر شخصي. تثبيت نظام التشغيل وبرامج تشغيل Windows 7. طرق تنظيف SP3 Professional Windows XP. طرق لاستعادة نظام التشغيل. جعل Microsoft Office 2010.

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

    جدول المحتويات:

    ما هو عزل النواة ونزاهة الذاكرة

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

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

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

    كيفية تمكين العزل النواة ونزاهة الذاكرة

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


    كما هو مذكور أعلاه، إذا كان مكون الأجهزة في الكمبيوتر لا يدعم إمكانية الافتراضية، فلن تعمل هذه الوظيفة. عند تشغيل المستخدم سترى الرسالة في الزاوية اليمنى السفلى. "غير قادر على ضمان سلامة الذاكرة. عدم التوافق المحتمل ". إذا ظهرت هذه الرسالة، فمن المستحسن أن تذهب إلى BIOS ومعرفة ما إذا كانت ميزة التمهيد الآمن تم تمكين (وضع التمهيد).

    كيفية تعطيل العزل النواة ونزاهة الذاكرة

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

    هناك 3 طرق لإيقاف تشغيل العزل النواة ونزاهة الذاكرة:


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

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

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

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

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

    يتم استخدام وضع الإسبات في Windows لتنفيذ المراوئات الزائفة من البداية، وتسمى HibleBoot، والتي يتم تنفيذها بشكل أسرع بكثير من الإغلاق المعتاد والإطلاق. عندما يعطي المستخدم النظام لإيقاف التشغيل، يعرض Hiberboot المستخدم من النظام، ثم يترجمه إلى حالة السبات في تلك المرحلة التي سيكون من الممكن تسجيل الدخول مرة أخرى. في وقت لاحق، عندما يقوم المستخدم بتشغيل النظام مرة أخرى، سيستأنف HibleBoot تشغيل النظام من نقطة الدخول للمستخدم. بالنسبة للمستخدم، كل هذا يبدو وكأنه إيقاف تشغيل سريع للغاية، حيث يتم تخطي معظم خطوات تهيئة النظام. بالطبع، في بعض الأحيان يجب إيقاف تشغيل النظام حقا للقضاء على المشكلات أو تعيين تحديث Kernel. إذا تلقى النظام أمر إعادة التشغيل، وليس عند إيقاف التشغيل، فإنه ينقل هذا الإيقاف وأداء الحمل المعتاد.

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

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

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