
# برمجة نواة masm32، برامج التشغيل، الدروس، الأمثلة، والأدوات (بفضل Four-F)
مستودع Dreg لاحتياجاته الشخصية
برمجة نواة masm32، برامج تشغيل، دروس تعليمية، أمثلة، وأدوات (يعود الفضل إلى Four-F)
في هذه اللحظة يتم إنشاء ملف .sys في C:\
تحميل برنامج التشغيل:
عند تحميل w2k_load.exe أو osrloader.exe قد يظهر خطأ في تحميل beeper.sys، تجاهله فقط.
يتم إنشاء هذا الخطأ بواسطة كود برنامج التشغيل نفسه عندما ينتهي من تنفيذه (بهذه الحيلة لا تحتاج إلى إلغاء تحميله)
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
لذا، إذا تم تحميل beep.sys بشكل صحيح في النواة، يجب أن تسمع صوت صفير من مكبرات الصوت (كود برنامج التشغيل يولّد صفيرًا)
عند الحاجة إلى إلغاء تحميل برنامج تشغيل استخدم:
لقد قمت بتعديل w2k_load.exe بواسطة Sven B. Schreiber ليعمل من ويندوز 2000 إلى ويندوز 10 (manifest...)
قم بفك ضغط osrloaderv30.zip واستخدم هذا البرنامج الرسومي:
لإصدارات ويندوز الأقدم فقط استخدم DbgView.exe المرفق في هذا المستودع. بالمناسبة، قمت بتعديله (manifest...)
بالنسبة لإصدارات ويندوز الحديثة استخدم آخر إصدار من dbgview.exe من موقع sysinternals، وتحقق من هذا لاستكشاف الأخطاء وإصلاحها:
اقرأ ملفات .pdf في هذا المستودع وشاهد الأمثلة في دليل KmdKit18/examples
تحذير: جميع أكواد ASM المصدرية موجودة داخل ملفات .bat (كود batch + كود asm مختلطان في نفس الملف)
مثال مع advanced\FindShadowTable\FindShadowTable.bat
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
يحتوي هذا الملف على كود BATCH الذي يولّد ملف .sys ويحتوي أيضًا على كود برنامج التشغيل المصدر نفسه. لذا، نعم، الأمر معقد جدًا، فسكربت البناء وكود المصدر معًا في مكان واحد
هذا مثال حول كيفية العثور على ServiceDescriptorTableShadow.
إنه فقط يمسح الخيوط (threads) ذات المعرف 80h-400h محاولًا العثور على خيط يكون فيه KTHREAD.ServiceTable غير مساوٍ لـ KeServiceDescriptorTable. إذا تم العثور على مثل هذا الخيط، فإن KTHREAD.ServiceTable الخاص به يحمل عنوان ServiceDescriptorTableShadow.
شاهد مخرجات التصحيح الخاصة ببرنامج التشغيل باستخدام DbgView (www.sysinternals.com) أو استخدم SoftICE.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
هذا مثال لبرنامج تشغيل تصفية بسيط قديم (غير PnP) للوحة مفاتيح PS/2. تحذير: ستفشل في إرفاقه بمكدس لوحة المفاتيح USB.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
Four-F, [email protected] ملفات الماكرو هذه من حزمتي cocomac.
هذا مثال لبرنامج تشغيل تصفية بسيط قديم (غير PnP) لفأرة PS/2. تحذير: ستفشل في إرفاقه بمكدس الفأرة USB.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
هذا مثال حول كيفية تطبيق إعدادات أمان معينة على كائن جهاز مسمى عن طريق استدعاء IoCreateDeviceSecure بدلاً من IoCreateDevice.
نظرًا لأن روتين IoCreateDeviceSecure ليس جزءًا من نظام التشغيل، فإننا نربط wdmsec.lib، الذي يحتوي على جميع الروتينات المطلوبة.
مكتبة wdmsec.lib التي ستجدها هنا ليست تلك التي تأتي مع DDK. كان عليّ إعادة بنائها لتقليل حجمها، مع إزالة الأعضاء غير الضرورية.
هذا مثال حول كيفية إنشاء الملف والكتابة إليه والقراءة منه وحذفه.
استخدم KmdManager للتسجيل/إلغاء التسجيل وتشغيله. شاهد مخرجات التصحيح الخاصة به باستخدام DbgView (www.sysinternals.com) أو استخدم SoftICE.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
هذا مثال حول كيفية تعبئة برنامج التشغيل داخل الموارد (resources).
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
الطريقة التي تعرف بها ما إذا كان النظام يعمل في الوضع الآمن أم لا.
استخدم KmdManager للتسجيل/إلغاء التسجيل وتشغيله. شاهد مخرجات التصحيح الخاصة به باستخدام DbgView (www.sysinternals.com) أو استخدم SoftICE.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
basic/MemoryWorks/LookasideList
هذا مثال حول كيفية استخدام قائمة lookaside والقائمة المرتبطة المزدوجة لإدارة كتل الذاكرة المخصصة من قائمة lookaside.
استخدم KmdManager للتسجيل/إلغاء التسجيل وتشغيله/إيقافه. شاهد مخرجات التصحيح الخاصة به باستخدام DbgView (www.sysinternals.com) أو استخدم SoftICE.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
هذا مثال حول كيفية التعامل مع الاستثناءات باستخدام SEH. لكن تذكر. لا يمكنك التعامل مع جميع الاستثناءات باستخدام SEH في وضع النواة!
استخدم KmdManager للتسجيل/إلغاء التسجيل وتشغيله/إيقافه. شاهد مخرجات التصحيح الخاصة به باستخدام DbgView (www.sysinternals.com) أو استخدم SoftICE.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
basic/MemoryWorks/SharedSection
هذا مثال حول كيفية استخدام كائن مقطع مسمى (section object) لمشاركة الذاكرة بين عملية وضع المستخدم وبرنامج تشغيل وضع النواة.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
basic/MemoryWorks/SharingMemory
هذا مثال على إحدى الطرق الممكنة لمشاركة مخزن الذاكرة بين وضع المستخدم ووضع النواة.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.
basic/MemoryWorks/SystemModules
هذا مثال حول كيفية تخصيص الذاكرة في وضع النواة. لكي لا نخصصها دون فائدة، نقوم بملئها ببعض معلومات النظام.
استخدم KmdManager للتسجيل/إلغاء التسجيل وتشغيله/إيقافه. شاهد مخرجات التصحيح الخاصة به باستخدام DbgView (www.sysinternals.com) أو استخدم SoftICE.
تم الاختبار على: ويندوز 2000 وXP وServer 2003.