ReactOS ahora comienza con una partici贸n BTRFS

Hola Habr! En esta serie, continuamos haci茅ndonos amigos intensamente con el controlador WinBtrfs y ReactOS.


驴Este es tu Windows?

Comencemos en orden. Despu茅s de la publicaci贸n anterior , se implement贸 un mini controlador para el gestor de arranque FreeLoader, que permite leer archivos de la secci贸n BTRFS en modo de solo lectura. El primer problema me esperaba aqu铆: BTRFS es un sistema de archivos que distingue entre may煤sculas y min煤sculas. Aqu铆, para buscar la estructura de inodo (esta estructura contiene informaci贸n b谩sica sobre el archivo), el hash del nombre del archivo se usa en el directorio, esto le permite recorrer las rutas sin extraer todos los archivos contenidos en el directorio.

Sin embargo, en el mundo de Windows, algo como un registro de nombre de archivo es de poca preocupaci贸n para nadie, por lo que las rutas a los controladores necesarios para cargar el sistema operativo se pueden escribir en el registro en absolutamente cualquier registro.

En este momento, este problema se resuelve con muletas viejas y buenas: cuando solicita buscar un archivo, System32 y SYSTEM32 se reemplazan por system32, lo mismo con la carpeta de controladores. Hasta ahora, estoy pensando c贸mo podr铆a hacerlo de manera competente. Lo m谩s probable es que cargue una lista completa de archivos en un directorio cada vez y haga una b煤squeda que no distinga entre may煤sculas y min煤sculas: el cargador de velocidad no ser谩 especialmente visible en el gestor de arranque.



El cargador lee los archivos, las muletas se endurecen, seguimos adelante.

Desarroll茅 el c贸digo del gestor de arranque en una m谩quina virtual Bochs, porque es lo m谩s conveniente para hacerlo. Pero ella (como result贸) tiene problemas para iniciar ReactOS, por lo que tuve que transferirme al VirtualBox habitual.

Y luego otra emboscada me estaba esperando, por alguna raz贸n, el sector de arranque no funcion贸. Al final result贸 que, hay algunos problemas en la implementaci贸n de la interrupci贸n INT 13h AH = 42h (lectura extendida desde el disco), por lo que esta funci贸n no puede leer m谩s de 8 sectores a la vez.

Y finalmente, el primer mensaje de error (隆ni siquiera es un BSOD!)



La excepci贸n con STATUS_ACCESS_VIOLATION provino del subsistema WinSxS, que se toma principalmente de Wine. Hubo que dedicar un par de d铆as a la causa de la ocurrencia, ya que todas las bibliotecas se cargan a trav茅s de WinSxS, y hay muchas de ellas al inicio. Al final, result贸 que el problema no estaba en WinSxS (fuch), sino en la llamada al sistema NtQueryDirectoryFile.

WinSxS a menudo usa esta funci贸n para buscar manifiestos por m谩scara (realizando consultas como: "* _Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0. *. * _ * _ *. Manifest"), y un error relacionado con el procesamiento de crept en el controlador WinBtrfs M谩scaras que comienzan con un asterisco. Puede ver una solicitud de extracci贸n muy simple aqu铆 .

Sorprendentemente, esto fue suficiente para completar la instalaci贸n y arrancar desde el escritorio


Quiz谩s el primer arranque del mundo desde el controlador WinBtrfs. La primera implementaci贸n de mi correcci贸n tambi茅n tuvo errores, lo que provoc贸 que los gr谩ficos fueran a alg煤n lado y no cargaran im谩genes.

En realidad, el sistema arranca e incluso funciona (aunque la estabilidad no es la misma que en la 煤ltima versi贸n 0.4.9 ).

Pero los problemas a煤n est谩n llenos:

  • No es compatible con archivos de intercambio. En t茅rminos generales, en Linux los archivos de intercambio en discos btrfs tampoco son compatibles, y el parche ha estado suspendido durante varios a帽os. Pero WinBtrfs s铆 los admite. Tenemos una implementaci贸n ligeramente diferente del administrador de memoria que en Windows, que requiere otra llamada al sistema que a煤n no est谩 disponible en WinBtrfs.
  • Escribe errores y desbordamiento de memoria. Me las arregl茅 para arreglar un par de tales, por ejemplo, al instalar el cliente Git. Descubriremos d贸nde fluye la memoria.
  • BSOD en apagado y reinicio. El parche ya est谩 esperando aprobaci贸n

Hasta el final, GSoC se qued贸 un poco, planea solucionar m谩s errores y resolver el problema con el archivo de intercambio (pero esto es despu茅s del final del programa).

Bueno, aquellos que quieran apoyar el desarrollo de esta caracter铆stica pueden unirse a las pruebas y el desarrollo del controlador WinBtrfs .

Source: https://habr.com/ru/post/es418861/


All Articles