O ReactOS agora começa com uma partição BTRFS

Olá Habr! Nesta série, continuamos a fazer intensamente amizade com o driver WinBtrfs e o ReactOS.


Esse é o seu Windows?

Vamos começar em ordem. Após a postagem anterior , foi implementado um mini-driver para o carregador de inicialização FreeLoader, que permite a leitura de arquivos da seção BTRFS no modo somente leitura. O primeiro problema me esperava aqui - o BTRFS é um sistema de arquivos que diferencia maiúsculas de minúsculas. Aqui, para procurar a estrutura do inode (essa estrutura contém informações básicas sobre o arquivo), o hash do nome do arquivo é usado no diretório, permitindo percorrer os caminhos sem retirar todos os arquivos contidos no diretório.

No entanto, no mundo Windows, um registro de nome de arquivo é pouco preocupante para ninguém, portanto, os caminhos para os drivers necessários para carregar o sistema operacional podem ser gravados no registro em absolutamente qualquer registro.

No momento, esse problema é resolvido por boas muletas antigas - quando você solicita a pesquisa de um arquivo, o System32 e o SYSTEM32 são substituídos pelo system32, o mesmo da pasta de drivers. Até agora, estou pensando em como fazer isso de forma competente. Provavelmente, carregarei uma lista completa de arquivos em um diretório toda vez e faço uma pesquisa que não diferencia maiúsculas de minúsculas - o speed loader não será especialmente visível no gerenciador de inicialização.



O carregador lê os arquivos, as muletas estão endurecidas - seguimos em frente.

Desenvolvi o código do gerenciador de inicialização em uma máquina virtual Bochs, porque é a coisa mais conveniente a ser feita. Mas ela (como se viu) tem problemas ao iniciar o ReactOS, então tive que transferir para o VirtualBox de sempre.

E então outra emboscada estava me esperando - por algum motivo, o setor de inicialização não funcionou. Como se viu, existem alguns problemas na implementação da interrupção INT 13h AH = 42h (leitura estendida do disco), pelo que essa função não pode ler mais de 8 setores por vez.

E, finalmente, a primeira mensagem de erro (nem é um BSOD!)



A exceção com STATUS_ACCESS_VIOLATION veio do subsistema WinSxS, que é retirado principalmente do Wine. Alguns dias precisaram ser gastos na causa da ocorrência, uma vez que todas as bibliotecas são carregadas através do WinSxS e existem muitas na inicialização. No final, descobriu-se que o problema não estava no WinSxS (muito), mas na chamada do sistema NtQueryDirectoryFile.

O WinSxS geralmente usa essa função para procurar manifestos por máscara (fazendo consultas como: "* _Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0. *. * _ * _ *. Manifest") e um erro relacionado ao processamento gerado no driver WinBtrfs máscaras começando com um asterisco. Você pode ver uma solicitação de recebimento muito simples aqui .

Surpreendentemente, isso foi suficiente para concluir a instalação e inicializar no desktop


Talvez a primeira inicialização do mundo a partir do driver WinBtrfs. A primeira implementação da minha correção também teve erros, o que fez com que os gráficos fossem para algum lugar e não carregassem fotos.

Na verdade, o sistema inicializa e até funciona (embora a estabilidade não seja a mesma que na versão 0.4.9 mais recente ).

Mas os problemas ainda estão cheios:

  • Não há suporte para arquivos de troca. De um modo geral, em arquivos de troca linux em discos btrfs também não são suportados, e o patch está suspenso há vários anos. Mas o WinBtrfs os suporta. Temos uma implementação ligeiramente diferente do gerenciador de memória que no Windows, o que requer outra chamada do sistema que ainda não está disponível no WinBtrfs.
  • Escreva erros e estouro de memória. Consegui consertar alguns deles, por exemplo, ao instalar o cliente Git. Vamos descobrir para onde a memória flui.
  • BSODs no desligamento e reinicialização. O patch já está aguardando aprovação

Até o final, o GSoC ficou um pouco, planeja corrigir ainda mais os bugs e resolver o problema com o arquivo de troca (mas isso ocorre após o final do programa).

Bem, aqueles que desejam dar suporte ao desenvolvimento desse recurso podem participar do teste e desenvolvimento do driver WinBtrfs .

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


All Articles