التحكم في الطاقة في ويندوز. التحكم في الطاقة في دورة أداء Windows
إن عزل النواة هي تكنولوجيا أمنية تستند إلى المحاكاة الافتراضية، والتي توفر مستوى إضافي من الحماية ضد الهجمات الذكية. تعد سلامة الذاكرة أحد مكونات تكنولوجيا عزل kernel - تهدف الوظيفة إلى منع إدخال التعليمات البرمجية الضارة في عمليات الأمان العالية. يتم ضمان الحماية بسبب حقيقة أن صفحة الذاكرة الظاهرية في Kernel تبدأ فقط بعد مرور النزاهة الناجحة.
النظر في كيفية تمكين وظيفة "سلامة الذاكرة" في تحديث Windows 10 أبريل 2018 لتعزيز أمان الكمبيوتر.
تمكين سلامة الذاكرة
- افتح مركز أمان Windows Defender.
- حدد القسم "سلامة الجهاز".
- في قسم "قسم عزل Kernel"، انقر فوق ارتباط "معلومات عزل النواة".
- حرك مفتاح تكامل الذاكرة إلى الوضع النشط.
بعد إكمال هذه الإجراءات، تحتاج إلى إعادة تشغيل الكمبيوتر بحيث تسري التغييرات.
ملحوظة: للعمل هذه الميزة، يجب أن يدعم المعالج الخاص بك تقنيات المحاكاة الافتراضية. بالإضافة إلى ذلك، يجب تمكين المحاكاة الافتراضية في BIOS أو UEFI. خلاف ذلك، ستكون الوظيفة غير متوفرة.
تصحيح مشاكل العزل نواة
في بعض الحالات، يمكنك مواجهة مشكلات التوافق في بعض التطبيقات، إذا تم تشغيل عزل Kernel. لإصلاح المشكلات سيتعين عليك إيقاف تشغيل الوظيفة.
إذا كنت تحاول تعطيل تكامل الذاكرة في مركز أمان Windows Defender، ولكن أصبح الخيار غير نشط ويتم عرض الرسالة. "هذه المعلمة تقود المسؤول"، ثم لا يزال بإمكانك إلغاء تنشيط الدالة باستخدام سجل النظام.
ملحوظة: تغيير التسجيل غير صحيح يمكن أن يؤدي إلى مشاكل خطيرة. يوصى بإنشاء نسخة احتياطية من سجل Windows قبل إجراء هذه الخطوات. في قائمة محرر التسجيل، حدد ملف\u003e تصدير لحفظ النسخ الاحتياطي.
- اضغط على مجموعة Windows + R الرئيسية لإظهار نافذة "تشغيل".
- أدخل REGEDIT وانقر فوق "موافق" لبدء تشغيل محرر التسجيل.
- الذهاب إلى الطريقة التالية:
- نقرتين متتاليتين ممكن..
- تغيير القيمة من 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 لديها القدرة على التمييز بين حركة الاتجاهات المختلفة، مما يعني عدم إدراج المعالج استجابة لكل حزمة تعسفية القادمة من واجهة الشبكة.