Windows Drivers e Bootloader
Sumário
- O que são device drivers ?
- Tipos de device drivers
- 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/
- Exemplos: https://github.com/Microsoft/Windows-driver-samples
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
- https://msdn.microsoft.com/en-us/windows/hardware/drivers/develop/deploying-a-driver-to-a-test-computer
-
Boot process
http://resources.infosecinstitute.com/windows-booting-process/
https://keystrokes2016.wordpress.com/2016/02/12/the-booting-processwindows/
Windows Drivers e Bootldr
By St4rk
Windows Drivers e Bootldr
Uma breve explicação sobre desenvolvimento de divers para Windows e o funcionamento do bootloader
- 62