Ferramentas necessárias e ambiente de desenvolvimento
O que é um bootloader ?
Processo de boot do Windows
Winmgr.exe
Winload.exe ou Winresume.exe
O que são Device drivers ?
São softwares que tem como finalidade controlar algum dispostivo conectado ao computador (via USB, PCI, [...]).
Ele vai tentar providenciar uma interface de software amigável com o dispositivo (hardware) conectado
O sistema operacional ou algum aplicativo que vai acessar o(s) driver(s).
Tipos de DEVICE Drivers - Function Driver
Normalmente o driver que se comunica direto com o dispositivo ligado ao computador é chamado function driver, ele é responsável por fazer toda a comunicação direta com o hardware, por exemplo, um hardware colocado no barramento de Peripheral Component Interconnect (PCI)
Tipos de DEVICE Drivers - FILTER DRIVER
Uma forma de controlar os dados que estão sendo transmitido, mudar o comportamento e observar se tudo está certo é utilizando Filter Drivers.
Eles são opcionais na hora do desenvolvimento de um driver.
Pode realizar tarefas auxiliares (como verificar informações).
Tipos de DEVICE Drivers - SOFTWARE DRIVER
Há casos que nós precisamos solicitar informações que está no Kernel Memory Space.
Uma aplicação no User Space pode solicitar ao Software Driver uma informação que está no Kernel, ele vai filtrar e devolver essa informação.
Tipos de DEVICE Drivers - BUS Driver
Um Bus Driver funciona essencialmente como um Function Driver, porém, ele é capaz de enumerar os dispositivos conectados no barramento, além de gerenciar o funcionamento deles.
Tipos de DEVICE Drivers - USERMODE Driver
Há casos onde você pode ter um User Mode Driver que recebe as informações da aplicação.
Essas informações vão ser verificadas e por fim (se necessário) envia elas para o Function Driver ou Filter Driver que vai lidar com o dispositivo conectado.
Ferramentas necessárias
e ambiente de desenvolvimento
Windows Driver Kit:https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit
Visual Studio (2015 na maioria dos tutoriais): https://www.visualstudio.com/downloads/
Ferramentas necessárias
e ambiente de desenvolvimento
Ferramentas necessárias
e ambiente de desenvolvimento
o que é um bootloader ?
É um software fundamental para a inicialização do sistema.
Ele é responsável pela configuração do hardware (no caso do x86_64 configurar registradores, como o CR0 responsável pelo protected mode).
Ele também carrega o kernel e modulos necessários.
PROCESSO DE BOOT DO WINDOWS
O processo explicado será utilizando BIOS como base
A diferença entre a versão UEFI é que teremos apenas o winload.uefi e winresume.uefi
PROCESSO DE BOOT DO WINDOWS - BIOS
O processo sempre iniciará na BIOS, que é o firmware que utilizado para inicializações básicas do hardware.
Ele vai buscar todos os dispositivos disponíveis para boot.
Dessa maneira, ele vai carregar o MBR do dispositivo e passar controle para ele.
PROCESSO DE BOOT DO WINDOWS - Master boot record
O MBR deve saber como o sistema de arquivos de disco é organizado.
Assim, ele vai ler o primeiro setor da partição de sistema (que contem o partition bootloader).
Em seguida a execução do código é passada para o Boot Sector Code.
Que carrega o bootmgr do dir. System Volume's root.
PROCESSO DE BOOT DO WINDOWS - Bootmgr 16 bits
Na arquitetura x86_64, quando ligamos o processador, ele vai funcionar em Real Mode (16 bits, sem paginação, multitasking, memoria virtual).
O código inicial do bootmgr deve configurar o processador para modo protected(bit 0 do CR0, Control Register)
PROCESSO DE BOOT DO WINDOWS - Bootmgr 32 bits
Uma vez no Protected Mode, o Boot Configuration Data (BCD) é carregado.
O BCD contem informações importantes de como o Sistema Operacional deve ser inicializado, onde o Windows tá localizado[...].
O próximo passo seria carregar o winload.exe ou winresume.exe
PROCESSO DE BOOT DO WINDOWS - BOOTMGR
PROCESSO DE BOOT DO WINDOWS - winresume
Se o sistema estava em hibernação, o bootmgr vai carregar o winresume.
A única diferença é que ele vai carregar o estado anterior do sistema operacional e a tela de abertura com Resuming Windows.
PROCESSO DE BOOT DO WINDOWS - winload
Ele vai carregar o SYSTEM registry que vai indicar todos os devices drivers que devem ser carregados
Após carregar todos os devices drivers, o ntoskrln(Windows Kernel) vai ser carregado na memória.
Por fim, o Winload chama o KiSystemStartup
referências
Windows Driver Development https://msdn.microsoft.com/windows/hardware/drivers/ gettingstarted/index http://electronicdesign.com/windows/how-write-windows-drivers https://msdn.microsoft.com/library/windows/desktop/ff381399
Boot process
http://resources.infosecinstitute.com/windows-booting-process/
https://keystrokes2016.wordpress.com/2016/02/12/the-booting-processwindows/