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 .