1120 Alameda Orquidea, Atibaia, SP,  BRA

fernando@driverentry.com.br

Legacy Drivers, WDM, WDF, KMDF, UMDF… WTF?!

Estes dias me perguntaram qual a relação entre o sistema operacional e essa sopa de letrinhas que vem se acumulando com o passar dos builds. Neste post vou tentar resumir o que cada um destes modelos traz de novo e qual sua relação com o sistema operacional.

No inicio Deus criou a Terra, logo em seguida veio o Windows NT que introduziu o que chamamos de “Legacy Drivers”. Este modelo foi utilizado em todos os drivers do Windows NT e ainda existe muito dos conceitos dele nos novos modelos. Aqui os conceitos clássicos de IRP e I/O Manager foram adotados.

Com a chegada do Plug-and-Play, os sistemas Windows 98 e Windows 2000 foram os primeiros da família a implementar o WDM (Windows Driver Model). Este modelo tinha a pretensão de unificar os conceitos de desenvolvimento para drivers em ambas as plataformas (9x e NT). Quem já teve contato com VXDs sabe o quanto são diferentes dos conceitos dos drivers do Windows NT. Programadores de VXDs tiveram que aprender uma tecnologia completamente diferente. Com o WDM, além de poder utilizar os mesmos fontes para gerar drivers para ambas as plataformas, os mesmos binários podem ser utilizados em ambas plataformas. Ou seja, eu posso gerar um único binário que irá rodar tanto em Windows 98 como em Windows 2000. Além disso, o WDM é capaz de identificar e classificar dispositivos pela classe e sub-classe do Plug-and-Play, e assim, associar drivers e filtros a eles. Os Legacy Drivers ainda são suportados em Windows 2000 assim como os VXDs ainda são suportados em Windows 98. Na prática, para a plataforma NT, drivers WDM são Legacy Drivers que compartilham de novas regras para classificar e associar drivers aos dispositivos. Já com relação à plataforma 9x, a mudança foi drástica. As chamadas WDM são encaminhadas a um VXD que faz a tradução de IRP para IOP.

Com o fim decretado da plataforma 9x, a grande necessidade agora era tornar o desenvolvimento de drivers uma coisa menos dolorosa de se fazer. Isso foi prioridade no desenvolvimento do WDF (Windows Driver Foundation). Um comentário que não esqueço foi do vídeo sobre o KMFD (Kernel Mode Driver Framework) no Channel9 que diz: “É difícil escrever driver de Kernel Mode. Realmente difícil. De fato, é difícil acreditar o quão dificil é. Bem, o pessoal de Windows Driver tem trabalhado intensamente para tornar um pouco menos difícil (não fácil) escrever drivers de Kernel Mode que não derrubem seu sistema. Você sabe, telas azuis e coisas assim.”. O WDF traz muita coisa pronta, detalhes que eram repetitivos mesmo em WDM agora têm um comportamento padrão no WDF, mas que podem ser alterados à medida da necessidade. Aplicando uma abstração muito maior que permite, por exemplo, registrar rotinas de callback para manipular somente os eventos do seu interesse e deixar que o framework tome conta do gerenciamento de energia, que diga-se de passagem, né brinquedo não. Maior abstração não significa necessariamente menor controle. Ainda se pode ter acesso a todos os membros de uma IRP caso você pense que é fácil e queira fazer com suas próprias mãos. Eu li num destes artigos da NT Insider que um desenvolvedor ainda tem saber muito mesmo para fazer pouco em Kernel Mode e a Microsoft quer mudar isso. Desenvolvedores poderiam saber menos sobre tantas coisas envolvidas no desenvolvimento de drivers para fazer algo simples. O WDF é composto pelo KMDF e UMDF (User Mode Driver Framework). Isso mesmo!!! User Mode. Fazer com que drivers sejam menos nocivos ao sistema e conseqüentemente impedir que uma falha em um driver que não seja crítico ao sistema (como o seu MP3 player) cause uma tela azul e derrube todo o seu sistema. É realmente interessante ver como isso funciona. Seu driver roda como um serviço COM, utilizando uma conta de sistema e que utiliza um framework de comunicação que é baseado em COM para ter uma interação com o sistema como se estivesse em Kernel Mode. Existe um .ppt muito interessante que foi utilizado na WinHEC 2006 que demonstra simplificadamente como isso acontece. Ainda não é possível desenvolver drivers .Net por causa do impacto de performance no sistema, mas que isso é desejável, não há sombra de dúvidas. É claro que apenas alguns tipos de dispositivos poderão trabalhar em User Mode, mas para a crescente linha de dispositivos USB já é tudibão. O WDF virá junto com o DDK do Windows Vista, muitos (para não mencionar todos) dos drivers do novo sistema foram migrados para WDF, mas este não é um luxo apenas do Windows Vista. O KMDF pode ser instalado mesmo em Windows 2000 SP4 e o UMDF beta pode ser instalado no Windows XP SP2.

One Response

  1. Olá, Fernando. Apenas repassando seus posts…

    Estava outro dia tentando achar o download do WDF, pelo menos no KMDF, mas não encontrei. Aparentemente ele só está disponível para os assinantes do MSDN. Isso é realmente verdade? Tinha a impressão que já existiu uma vez na história esse download no saite da Microsoft, mas agora sumiu!

    Um detalhe que vale a pena comentar é sobre essa compatibilidade binária entre drivers WDM para Windows 2000 e Windows 98. É possível sim que um mesmo binário seja compatível nesses dois sistemas, porém, pelo que li no Windows 2000 Device Driver Book a Microsoft não garante essa compatibilidade, sendo recomendável recompilar o mesmo fonte nos dois DDKs distintos (para plataformas NT e 9x).

Leave a Reply

Your email address will not be published.