Driver é um software que permite que o sistema operacional se comunique com um periférico ou um aplicativo. Ele atua como uma ponte de comunicação entre o hardware e o software, permitindo que o Windows utilize corretamente os recursos e funcionalidades do hardware instalado, seja uma placa de vídeo, som, impressora, disco rígido, etc.
Ao contrário do que muitos pensam, um driver não é utilizado somente por hardwares e dispositivos: ele também é necessário para aplicativos funcionarem corretamente, como antivírus, programas de virtualização, firewall, softwares de rede, etc.
Quando você “instala o driver”, na prática você não está instalando um driver, mas sim o pacote de driver, que é uma coleção de arquivos (.exe, .dll, .sys, .inf, etc.) que permitem que o componente de hardware ou o software funcione corretamente no Windows.
Cada dispositivo precisa de um pacote de driver. O Windows fornece alguns pacotes de driver genéricos para vários dispositivos, mas para dispositivos que não têm suporte no Windows, o fornecedor do dispositivo deve fornecer um pacote de driver personalizado.
Existem dois tipos principais de drivers: User-mode e Kernel-mode
User Mode (ou Modo de Usuário) é um driver executado no mesmo espaço de memória que os aplicativos comuns, ou seja, no modo de usuário do sistema operacional.
Por causa disso ele tem acesso limitado ao hardware do computador e precisa se comunicar com o kernel do Windows para realizar a maioria das tarefas.
Esses drivers são ideais para dispositivos que não requerem acesso direto ao hardware, como impressoras de rede, webcams e dispositivos USB simples.
Drivers tipo User-mode têm quatro vantagens e duas desvantagens:
Estabilidade do Sistema: Drivers de modo de usuário com bugs não travam o Windows, pois eles operam em um espaço separado do kernel (o “cérebro” do Windows, conforme detalhado abaixo) do sistema operacional.
Segurança: O acesso limitado ao hardware reduz o risco de vulnerabilidades de segurança exploradas por drivers maliciosos.
Flexibilidade: Drivers de modo de usuário podem ser instalados e desinstalados dinamicamente, sem a necessidade de reiniciar o computador.
Desenvolvimento Simplificado: O UMDF oferece uma interface de programação de alto nível, tornando o desenvolvimento de drivers mais fácil e rápido.
Performance: Devido à camada extra de comunicação com o kernel, drivers de modo de usuário podem ter um ligeiro impacto no desempenho, especialmente para tarefas exigentes de hardware.
Funcionalidade Limitada: Nem todos os dispositivos podem ser controlados por drivers de modo de usuário, pois alguns requerem acesso direto ao hardware, o que só é possível com drivers de modo kernel.
O UMDF (User-mode Driver Framework) é uma estrutura fornecida pela Microsoft que facilita o desenvolvimento de drivers de modo de usuário seguros e eficientes.
Diferentemente do User-mode que opera em um espaço restrito, o driver Kernel-mode (ou Driver de Kernel) roda no mesmo nível que o kernel do Windows, que é o núcleo (ou “cérebro”) do sistema operacional.
Isso faz com que um driver de kernel tenha acesso direto ao hardware do computador, permitindo interações de alto desempenho e controle granular.
Isso torna esse tipo de driver muito poderoso, pois ele pode acessar funções importantes do sistema operacional, aplicativos e segurança. O maior problema nisso é que se esse driver travar, o Windows também poderá travar.
Um driver de kernel não precisa ser obrigatoriamente um driver de hardware, pois muitos aplicativos instalam esse tipo de driver para funcionarem corretamente. O melhor exemplo disso são antivírus, que instalam drivers de kernel para poderem acessar arquivos e executáveis no disco rígido e na memória RAM sem nenhuma restrição.
O driver de kernel tem três vantagens e três desvantagens:
Vantagens do Driver de Modo Kernel:
Acesso total ao hardware: Drivers de kernel podem interagir diretamente com o hardware, explorando todo o seu potencial e otimizando o desempenho.
Controle preciso: Eles oferecem controle preciso sobre o funcionamento do dispositivo, permitindo a implementação de funcionalidades complexas e ajustes finos.
Prioridade de execução: Driver de kernel tem prioridade de execução em relação aos aplicativos comuns, para que a comunicação dele com o hardware seja imediata.
Instabilidade do Sistema: Bugs ou falhas em um driver de modo kernel podem levar ao travamento do Windows, exigindo reinicialização.
Segurança: O acesso direto ao hardware aumenta o risco de vulnerabilidades de segurança exploradas por drivers maliciosos. Por esse motivo muitos malwares infectam drivers de kernel para que possam ser executados sem restrição.
Desenvolvimento complexo: Desenvolver drivers de modo kernel requer conhecimento profundo da arquitetura do sistema operacional e do hardware específico, tornando o processo mais complexo e lento.
No Windows XP, os drivers da placa de vídeo eram drivers de Kernel, e por esse motivo, quando o driver de vídeo travava, o Windows XP também travava.
A partir do Windows Vista os drivers de vídeo se tornaram drivers tipo User-mode, evitando que o Windows travasse se houvesse algum bug ou falha nele.
Os drivers de vídeo evoluíram muito nos últimos anos, e o “driver de vídeo” na realidade é um conjunto de vários drivers (e não um driver único) que trabalham em conjunto.
Embora alguns desses drivers sejam drivers de kernel, a renderização gráfica é realizada por drivers tipo user-mode, evitando que um bug nesse driver afete a estabilidade do Windows.
O responsável por essa transição de driver Kernel-mode para User mode é o WDDM (Windows Display Driver Model).
WDDM (Windows Display Driver Model) é uma arquitetura de driver gráfico criado para o Windows Vista e as subsequentes versões do Windows. O WDDM foi projetado para fornecer uma interface padronizada entre os drivers de dispositivos gráficos e o sistema operacional Windows, visando melhorar o desempenho, a estabilidade e a eficiência dos gráficos.
Quer saber mais sobre o WDDM? Eu detalho ele nesse artigo e também abordo WDDM na Aula 12 do curso ATPI.
Além do User-mode e Kernel-mode, existem outros tipos de drivers que são necessários de acordo com o hardware utilizado.
Bus Driver é um driver importantíssimo necessário para controladoras detectarem os periféricos soldados na placa-mãe ou instalados em algum slot.
Function Driver é o principal driver de um periférico, sendo na prática o DRIVER que todos falam para baixar do site do fabricante. Ele é o principal driver criado pela fabricante e está no meio dessa cadeia de drivers, sendo que ele depende de outros drivers.
Filter Drivers, que permite adicionar funcionalidades ao Function Driver, que é o driver principal.