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