مرحبا يا هبر! في هذه السلسلة ، نواصل تكوين صداقات مكثفة مع برنامج تشغيل
WinBtrfs و ReactOS.
هل هذا ويندوز الخاص بك؟لنبدأ بالترتيب. بعد المنشور السابق ، تم تنفيذ برنامج تشغيل صغير لمحمّل التمهيد FreeLoader ، والذي يسمح بقراءة الملفات من قسم BTRFS في وضع القراءة فقط. كانت المشكلة الأولى في انتظاري هنا - BTRFS هو نظام ملفات حساس لحالة الأحرف. هنا ، للبحث عن
بنية inode (تحتوي هذه البنية على معلومات أساسية حول الملف) ، يتم استخدام تجزئة اسم الملف في الدليل ، وهذا يسمح لك بالسير في المسارات دون سحب جميع الملفات الموجودة في الدليل.
ومع ذلك ، في عالم Windows ، لا يمثل أي شيء مثل تسجيل اسم الملف مصدر قلق كبير لأي شخص ، لذلك يمكن كتابة المسارات إلى برامج التشغيل المطلوبة لتحميل نظام التشغيل في التسجيل في أي سجل على الإطلاق.
في الوقت الحالي ، يتم حل هذه المشكلة عن طريق
العكازات القديمة الجيدة - عندما تطلب البحث عن ملف ، يتم استبدال System32 و SYSTEM32 بواسطة system32 ، تمامًا مع مجلد برامج التشغيل. حتى الآن ، أفكر كيف يمكن للمرء أن يفعل ذلك بكفاءة. على الأرجح سأقوم بتحميل قائمة كاملة من الملفات في دليل في كل مرة وأجري بحثًا غير حساس لحالة الأحرف - لن يكون محمل السرعة مرئيًا بشكل خاص على أداة تحميل التشغيل.

يقرأ المحمل الملفات ، ويتم تقوية العكازات - فننتقل.
لقد طورت رمز برنامج bootloader في جهاز Bochs الظاهري ، لأنه أكثر شيء ملائم للقيام به. لكنها (كما اتضح) لديها مشاكل في إطلاق ReactOS ، لذلك اضطررت إلى الانتقال إلى VirtualBox المعتاد.
ثم انتظرني كمين آخر - لسبب ما ، لم يعمل قطاع التمهيد. كما اتضح ، هناك بعض المشاكل في تنفيذ مقاطعة INT 13h AH = 42h (قراءة موسعة من القرص) ، والتي لا يمكن لهذه الوظيفة قراءة أكثر من 8 قطاعات في كل مرة.
وأخيرًا ، رسالة الخطأ الأولى (ليست حتى BSOD!)

جاء الاستثناء مع STATUS_ACCESS_VIOLATION من النظام الفرعي WinSxS ، والذي يتم أخذه بشكل أساسي من Wine. كان يجب قضاء يومين على سبب حدوث ذلك ، حيث يتم تحميل جميع المكتبات من خلال WinSxS ، وهناك الكثير منها عند بدء التشغيل. في النهاية ، اتضح أن المشكلة لم تكن في WinSxS (fuch) ، ولكن في استدعاء نظام NtQueryDirectoryFile.
غالبًا ما يستخدم WinSxS هذه الوظيفة للبحث عن القوائم حسب القناع (من خلال إجراء استعلامات مثل: "* _Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0. *. * _ * _ *. Manifest") ، وخطأ مرتبط بمعالجة تسلل في برنامج تشغيل WinBtrfs أقنعة تبدأ بعلامة النجمة. يمكنك رؤية طلب سحب بسيط للغاية
هنا .
والمثير للدهشة أن هذا كان كافياً لإكمال التثبيت والتمهيد على سطح المكتب
ربما التمهيد الأول في العالم من برنامج تشغيل WinBtrfs. يحتوي التطبيق الأول لإصلاحي أيضًا على أخطاء ، مما تسبب في انتقال الرسومات إلى مكان ما وليس تحميل الصور.في الواقع ، يتم تشغيل النظام وحتى يعمل (على الرغم من أن الاستقرار ليس هو نفسه كما في أحدث
إصدار 0.4.9 ).
لكن المشاكل لا تزال ممتلئة:
- لا يوجد دعم ملف المبادلة. بشكل عام ، على ملفات مبادلة لينكس على أقراص btrfs غير مدعومة أيضًا ، وقد تم تعليق التصحيح لعدة سنوات. لكن WinBtrfs يدعمها. لدينا تطبيق مختلف قليلاً لإدارة الذاكرة عن Windows ، الأمر الذي يتطلب استدعاء نظام آخر لم يتوفر بعد في WinBtrfs.
- كتابة الأخطاء وتجاوز الذاكرة. تمكنت من إصلاح اثنين من هذه ، على سبيل المثال ، عند تثبيت عميل Git. سنكتشف أين تتدفق الذاكرة.
- BSODs على إيقاف التشغيل وإعادة التشغيل. التصحيح ينتظر الموافقة بالفعل
حتى النهاية ، تم ترك GSoC قليلاً فقط ، وتخطط لإصلاح الأخطاء بشكل أكبر ، وحل المشكلة مع ملف المبادلة (ولكن هذا بعد نهاية البرنامج).
حسنًا ، يمكن لأولئك الذين يرغبون في دعم تطوير هذه الميزة الانضمام إلى اختبار وتطوير برنامج تشغيل
WinBtrfs .