Hallo Habr! In dieser Serie schließen wir weiterhin intensive Freundschaften mit dem
WinBtrfs- Treiber und ReactOS.
Ist das dein Windows?Beginnen wir in der richtigen Reihenfolge. Nach dem
vorherigen Beitrag wurde ein Minitreiber für den FreeLoader-Bootloader implementiert, mit dem Dateien aus dem BTRFS-Abschnitt im schreibgeschützten Modus gelesen werden können. Das erste Problem erwartete mich hier - BTRFS ist ein Dateisystem, bei dem zwischen Groß- und Kleinschreibung unterschieden wird. Um nach der
Inode-Struktur zu suchen (diese Struktur enthält grundlegende Informationen zur Datei), wird hier der Hash des Dateinamens im Verzeichnis verwendet. Auf diese Weise können Sie die Pfade durchlaufen, ohne alle im Verzeichnis enthaltenen Dateien abzurufen.
In der Windows-Welt ist so etwas wie ein Dateinamenregister für niemanden von Belang, sodass die Pfade zu den Treibern, die zum Laden des Betriebssystems erforderlich sind, in absolut jedem Register in die Registrierung geschrieben werden können.
Im Moment wird dieses Problem durch gute alte
Krücken gelöst. Wenn Sie nach einer Datei suchen möchten, werden System32 und SYSTEM32 durch system32 ersetzt, genau wie der Treiberordner. Bisher denke ich darüber nach, wie man es kompetent machen kann. Höchstwahrscheinlich werde ich jedes Mal eine vollständige Liste der Dateien in ein Verzeichnis hochladen und eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführen. Der Speedloader wird im Bootloader nicht besonders sichtbar sein.

Der Lader liest die Dateien, die Krücken sind gehärtet - wir gehen weiter.
Ich habe den Bootloader-Code in einer virtuellen Bochs-Maschine entwickelt, weil dies am bequemsten ist. Aber sie hat (wie sich herausstellte) Probleme beim Starten von ReactOS, so dass ich auf die übliche VirtualBox umsteigen musste.
Und dann wartete ein weiterer Hinterhalt auf mich - aus irgendeinem Grund funktionierte der Bootsektor nicht. Wie sich herausstellte, gibt es einige Probleme bei der Implementierung des Interrupts INT 13h AH = 42h (erweitertes Lesen von der Festplatte), aufgrund dessen diese Funktion nicht mehr als 8 Sektoren gleichzeitig lesen kann.
Und schließlich die erste Fehlermeldung (es ist nicht einmal ein BSOD!)

Die Ausnahme mit STATUS_ACCESS_VIOLATION kam vom WinSxS-Subsystem, das hauptsächlich aus Wine stammt. Es mussten einige Tage für die Ursache des Ereignisses aufgewendet werden, da alle Bibliotheken über WinSxS geladen werden und viele davon beim Start vorhanden sind. Am Ende stellte sich heraus, dass das Problem nicht in WinSxS (fuch), sondern im Systemaufruf NtQueryDirectoryFile lag.
WinSxS verwendet diese Funktion häufig, um nach Manifesten nach Maske zu suchen (indem Abfragen wie "* _Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0. *. * _ * _ *. Manifest" gestellt werden) und ein Fehler im Zusammenhang mit der Verarbeitung im WinBtrfs-Treiber aufgetreten ist Masken beginnend mit einem Sternchen. Sie können hier eine sehr einfache Pull-Anfrage
sehen .
Überraschenderweise reichte dies aus, um die Installation abzuschließen und den Desktop zu starten
Vielleicht der weltweit erste Start vom WinBtrfs-Treiber. Die erste Implementierung meines Fixes hatte auch Fehler, die dazu führten, dass die Grafiken irgendwohin gingen und keine Bilder geladen wurden.Tatsächlich
startet das System und funktioniert sogar (obwohl die Stabilität nicht die gleiche ist wie in der neuesten
Version 0.4.9 ).
Aber die Probleme sind immer noch voll:
- Keine Unterstützung für Auslagerungsdateien. Im Allgemeinen werden Swap-Dateien unter Linux auf BTRFS-Festplatten ebenfalls nicht unterstützt, und der Patch hängt seit mehreren Jahren. Aber WinBtrfs unterstützt sie. Wir haben eine etwas andere Implementierung des Speichermanagers als in Windows, für die ein weiterer Systemaufruf erforderlich ist, der in WinBtrfs noch nicht verfügbar ist.
- Schreibfehler und Speicherüberlauf. Ich habe es geschafft, einige davon zu beheben, zum Beispiel bei der Installation des Git-Clients. Wir werden herausfinden, wohin die Erinnerung fließt.
- BSODs beim Herunterfahren und Neustarten. Der Patch wartet bereits auf die Genehmigung
Bis zum Ende blieb GSoC nur ein wenig übrig, plant, weitere Fehler zu beheben und das Problem mit der Auslagerungsdatei zu lösen (dies ist jedoch nach dem Ende des Programms).
Nun, diejenigen, die die Entwicklung dieser Funktion unterstützen möchten, können am Testen und Entwickeln des
WinBtrfs- Treibers teilnehmen.