logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

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 15:47, por Rodrigo Strauss


  
 
 
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
Breno | em 21/09/2011 | #
Muito bom o artigo, tentarei desenvolver o driver, mas só para treinamento, pois ainda estou iniciando na programação e as minhas logicas de programação são um pouco ainda limitadas.
Programmer | website | e-mail | em 11/05/2012 | #
Que bosta esse topico, não ajudou em nada a não ser falar mal de quem ja programa e outras linguagens diferentes de C. Fácil assim, falou um monte e não disse nada, não me ajudou a criar um driver. Apenas listou um monte de livros, e blá-blá-blá... coisa que o próprio google pode nos fornecer, então nota zero para o tópico. Melhor, nota -1 porque ainda me fez perder tempo lendo...
Rodrigo Strauss | website | em 11/05/2012 | #
Me desculpe ter desperdiçado seu precioso tempo. Tenho certeza que você tem vários projetos de software importantíssimos para fazer.
Gustavo | em 04/07/2012 | #
Olá Rodrigo,

Infelizmente não achei seu tópico bom. Espero que vc saiba ler e aceitar críticas, mas o título de seu tópico nos leva a ter uma expectativa que de forma alguma é desenvolvida no decorrer do artigo.

"Como fazer drivers..." leva a uma ideia mais prática e objetiva.

Quase 50% desta primeira parte apenas enfraquece o desejo qualquer pessoa que pretenda iniciar o processo de aprendizagem sobre o assunto.

Creio que um título mais apropriado seria:

"Introdução às ferramentas e bibliografias necessárias para o desenvolvimento de drivers para Windows NT/2000/XP/2003, parte 1"

Trabalho com a programação em C para reconhecimento de dispositivos baseados em Linux / Android. Espero que compreenda minha insatisfação quanto às expectativas frustradas.
a | website | em 18/08/2012 | #
Uma bosta o seu artigo.
void | website | em 23/02/2013 | #
Excelentes indicações. Apenas pecou no título que realmente da o entende que estaria o passo a passo no desenvolvimento dos drivers.

Parabéns.
Anta Rodrigues | website | e-mail | em 21/01/2015 | #
Ola!! Rodrigo, um bom tempo!!

Tambem estou a muito tempo tentando escrever alguns arquivos para rodar um device no win mas tá meio dificio e estou quase arrncando os cabelos da cabeça e dando a preula,
tenho que escrever alguns arquivos no device que é para tro-
car informaçoes com o host e tudo sozinho é de matar quaquer
um. Gostaria de uma informaçao, nao dá para eu enviar um conjunto de byts combinado para fora da usb e receber outro
completamente fora do padrao ieee ? sem ack tokem pid..., somente troca de pacotes de byts como por exemplo uma determinada combinaçao e aguarda outra se nao tiver retorno escrever o que foi programado como; sem resposta ou descone-
nectado. Na realidade isso poderia ser mais facio mas...
aguardo alguma dica até entao meu brigado!!!
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
  ::::