logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

Add to Google Subscribe with Bloglines

Como fazer drivers para Windows NT/2000/XP/2003, parte 1

A dúvida mais frequente que eu recebo pelo formulário de contato é: "como eu faço para desenvolver drivers para Windows?". Vou publicar algumas dicas aqui para quem está iniciando.

Pré requisitos

Primeiramente eu espero que você seja um bom programador, programar drivers não é fácil. :-)

Para fazer um driver, você precisa SABER programar drivers (programação kernel mode). Parece óbvio mas não é. Eu recebo todo mês pelo correio a newsletter da OSR, e a do mês passado era uma edição especial com o dobro do tamanho normal, falando sobre teste de drivers. E lá eu li algo muito interessante: em kernel mode, é impossível fazer programação cowboy. Programação cowboy é quando você não entende muito do assunto, pega um código exemplo daquilo que você quer e sai ajustando e remendando até que fique bom, e depois entrega para o cliente. Quando a coisa roda em kernel mode, isso nunca vai ficar bom, a não ser que você saiba mesmo o que está fazendo. Eu conheço uma empresa que está remendando um driver faz mais de dois anos, e até hoje não funciona direito.

Você precisa ser um bom programador C, ponto. Caso você ainda tenha dúvida sobre ponteiros ou estruturas de dados, programação de drivers é um péssimo lugar para treinar isso. O indicado é que você consiga fazer um programa Win32 com certa facilidade antes de se aventurar a programar drivers. Alguns conceitos de passagem de parâmetros IN e OUT usando estruturas e ponteiros void que viram ponteiro para estruturas mágicas também são usados em Win32. Ah, e se você não souber o que é uma lista ligada, veja antes na wikipedia, você vai usar isso muito.

(E antes que alguém pergunte, experiência com C#, VB.NET, VB6 ou Java não vai te ajudar em muita coisa além do treino em lógica de programação)

Onde encontrar informações

Agora que você já passou pelo blá-blá-blá, vamos ao que realmente interessa. Se você quer programar em kernel mode você terá que estudar bastante, e é melhor que comece o quanto antes.

Livros

Microsoft Windows Internals - Esse é o primeiro que você deve ler e reler. Não trata especificamente sobre programação kernel mode, mas descreve o funcionamento do kernel do Windows. E é ESSENCIAL que você saiba isso.

Programming the Windows Driver Model - Esse trata especificamente de programação kernel mode. Windows Driver Model (WDM) é um modelo de programação de drivers (mais voltado para drivers que controlam hardware). Caso seu driver siga as regras do WDM, seu driver pode ser compilado para Windows 2000 ou superior e Windows 98 e superior. Mesmo que seu driver não seja para um hardware (um firewall é um driver e não controla hardware), vale a pena ler esse livro, ele explica muito bem como funciona a sincronização e o I/O em kernel mode.

Existem mais livros, esses dois são os que eu tenho e uso para consulta. Procure na Amazon.

Internet

OSR Online - Empresa dos Estados Unidos que além de dar treinamentos sobre desenvolvimento kernel mode, disponibiliza bastante material sobre isso.

Windows Drivers Developer's Digest (W3D) - Artigos escritos por autoridades do assunto, como Walter Oney e Thomas Divine.

Listas de discussão - Nessa categoria temos as listas da OSR, o newsgroup da Microsoft sobre drivers e a lista da PCAUSA (específica para a parte de rede e afins).

Na continuação dessa série, falarei sobre o DDK e como colocar a mão na massa.


Em 21/11/2004 09:47


  
 
 
Comentários
wil | em 26/01/2007 | #
Ótimo conteúdo,muito bem explicado e o melhor totalmente em portugues.Parabens Rodrigo,e obrigado por compartilhar o seu conhecimento com os demais


flw
Fabio Pandolfo | e-mail | em 05/04/2007 | #
Cara, que legal o artigo!!!
Muito interessante...
Eu tenho um aparelho gravador de DVD Panasonic DMR-ES15, que tem uma entrada firewire, mas ele somente te dá uma saida analógica se você ligar uma câmera digital nele, não funciona no computador... eu tava pensando em fazer um driver no computador pra poder mandar o sinal do pc pra ele... espero que seja possivel!!!
Lucas Klassmann | website | em 25/04/2007 | #
Legal esse artigo Rodrigo, aproveitei para ler o artigo sobre bons programadores.
Estou a muito tempo procurando material para ver como funciona e quem sabe desenvolver meu driver.
Eu tambem estou procurando materiais sobre programação de Sistemas Operacionais, consegui varios e entre ele manuais de como desenvolver devices driver para placas de redes.
Eu não sou o mestre em programação, mas acho que posso me incluir na lista de bons programadores, eu sou curioso pela informática (principalmente programação) desde os 13 anos(agora estou com 19), ja pratiquei C\C++, Delphi, Python, TCL\Tk, Java, JScript, HTML e muitas outras.
A Linguagem que mais sei trabalhar é Delphi, pois fiz um cursor técnico( um detalhe a mais no curriculo :P) e a linguagem utilizada era o Delphi, mas minha paixão mesmo é C e tambem me fascino por Assembly.
Eu estava procurando algum artigo que mostra-se algo para o programador saber o seu nivel, eu tenho essa dificuldade, estudo muito, mas não sei se posso me considerar iniciante, medio ou avançado.
Essa dificuldade vem por que conheço pessoas que trabalham na área a muito tempo e até mesmo dão aulas, mas não sabem coisas que aprendi a muito tempo e que sei na ponta da lingua.
Bom é isso ai, ótimo artigo.
Até mais.

Lucas Klassmann - LFK
Thiago | em 19/07/2007 | #
Bom artigo e fico surpreso em ver isso em PT-BR. Afinal, Drivers programming é um assunto quase que "proibido" de compartilhar, a nao ser em listas de discussões.
Rodrigo Strauss | website | em 19/07/2007 | #
Veja www.driverentry.com.br
Demetryus | em 14/10/2009 | #
Olá amigo, eu estou procurando cursos para desenvolvimento de drivers aqui no Brasil,,,você teria algum para me recomendar? eu não procuro certificação apenas o conhecimento mesmo...

Você poderia por favor comentar o que é o WDK? e qual a diferença para o DDK?

Obrigado
Demetryus
Rodrigo Strauss | website | em 14/10/2009 | #
Fale com o Fernando, www.driverentry.com.br
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::