1120 Alameda Orquidea, Atibaia, SP,  BRA

contact@driverentry.com.br

Quem não tem cão caça com DSF

Vocês já devem estar cansados de ler que a OSR tem kits de hardware para treinamento de construção de drivers para USB e PCI. É realmente muito frustrante querer aprender a desenvolver drivers que controlam placas sem ao menos ter uma por perto. Mas sou pobre pobre pobre de marré marré marré e não tenho grana pra ficar comprando estes brinquedinhos importados. Na verdade eu também engoli meio quadrado quando tive que ir até a agência dos correios buscar os dois kits que comprei e pagar uma tributação simbólica de R$ 319,46 sem contar com o custo dos kits. Bem, este é um ponto.

Admitindo que você já é um programador experiente e que já sabe fazer drivers para dispositivos USB com um olho amarrado nas costas, imagine que você tenha que escrever um driver para um dispositivo USB que ainda não está pronto. Ou seja, você tem a especificação, conhece as características dele, mas de fato o dispositivo ainda não está pronto para você fazer os testes que você precisa. Neste caso, o kit de treinamento também não ajudaria muito. Este é outro ponto.

Unindo estes pontos vemos que estamos perdidos mesmo e que o negócio é vender água de coco na praia.

Uma alternativa considerável

Pesando nestes mesmos pontos, a Microsoft desenvolveu o Device Simulation Framework for USB Devices. Este framework é composto de, entre outros componentes, um driver que é instalado em sua máquina de teste e que passa a simular uma controladora USB. Este driver é um Lower Filter dos drivers de controladores USB do Windows. Ele intercepta as interações que o Windows faz com o verdadeiro hardware e simula interrupções de hardware. Do ponto de vista do driver, não há nenhuma diferença entre o DSF e dispositivos reais.

Mas como o framework simularia um dispositivo USB que ele não conhece? Na verdade, o framework redireciona estas interações para componentes em User Mode que podem ser escritos por você em qualquer linguagem que possa usar COM. Desta forma, você pode controlar o comportameto do dispositivo que está sendo simulado. Observem a figura que peguei emprestado da página do MSDN para que vocês tenham uma visão mais clara de como estes componentes estão organizados.

Instalando o DSF

O DSF vem no ISO do WDK que você baixa da Microsoft e só pode ser instalado em Windows XP SP2 ou superior (incluindo plataformas x64). Quando você instala o WDK em sua máquina, o DSF não é instalado. Você precisa instalá-lo a parte. Os arquivos dsfx86runtime.msi e dsfx64runtime.msi, responsáveis pela instalação, são encontrados na pasta \dsf do ISO de instalação. A instalação do framework é extremamente simples, mas você só consegue ver alguma coisa quando, depois de instalado, você roda a linha de comando softehcicfg /install na pasta \Program Files\dsf\softehci, como mostra abaixo.


Esta linha de comando cria a controladora USB virtual na sua arvore de dispositivos do Device Manager. Seu sistema pode pedir os drivers do novo hardware que foi adicionado. Caso isso aconteça, indique o diretório do sistema (C:\Windows) para que seja feita a busca pelos drivers. Instalados os drivers, você deveria ganhar dois novos dispositivos, sendo eles, Microsoft USB 2.0 EHCI Host Controler Simulator e um USB Root Hub, como mostra abaixo.

Escrevendo disposivos em VBScript

Para simular os dispositivos, o DSF instala um grupo de componentes COM que implementam objetos tais como: Devices, Configurations, Interfaces, EndPoints, Descriptors e por aí vai. Quem já desenvolveu para USB sabe bem do que estou falando. Com estes objetos, você pode escrever componentes que podem simular qualquer dispositivo USB. Junto do framework, são instalados três exemplos de dispositivos que podem ser simulados. Os fontes destes dispositivos estão juntos dos exemplos que vêm no WDK na pasta \WinDDK\6000\src\Test\DSF\USB. Para utilizar um destes exemplos, precisamos apenas de uma liguagem de script, ou qualquer linguagem que faça interface COM.

Vamos dar uma olhada no exemplo de teclado e dar uma fuçada nas IRPs do teclado criado. Para colocar o teclado para funcionar, vá até a pasta \Program Files\dsf\usbhid e rode a seguinte linha de comando cscript Create1.1Kbd.wsf e siga os passos indicados. Se for a primeira vez que você estiver fazendo isso, o Windows pode pedir os drivers dos dispositivos novos que serão criados. O script criará um Generic USB Hub e um Microsoft USB Natural Keyboard conforme mostra abaixo.


Antes de remover estes dispositivos, vamos dar uma olhada com o IRP Tracker, software que já comentei em um outro post, e observar as IRPs deste teclado que está sendo simulado. Inicie o IRP Tracker e selecione todo o driver KbdClass. O KbdClass é o driver responsável por centralizar e implementar as interfaces para os dispositivos a classe Teclado. As IRPs de todos os teclados passam por aqui.

Enquanto o primeiro prompt de comando está parado, inicie mais um prompt de comando e, no mesmo diretório do exemplo do teclado, execute a seguinte linha de comando: cscript Use1.1Kbd.wsf. Este script simula o pressionar das teclas do teclado simulado escrevendo a frase “Hello World!”. Para cada tecla que o sistema obtém, são gerados os registros das IRPs monitoradas. Desta forma, o IRP Tracker deve ficar como mostra abaixo.


Esta é uma excelente ferramenta para utilizar com máquinas virtuais e pode lhe adiantar um bom montante de testes até que o hardware real esteja pronto. Nos casos onde o hardware é novo e o driver também, esse pode ser um divisor de águas para saber quem é que está gerando a tela azul. Afinal, hardware também tem bug. Ou mesmo no caso de você ser um estudante e não ter nenhum hardware para treinar seu aprendizado. Pelo menos você não vai queimar nada.

Até mais,
[]s.

2 Responses

  1. Tudo bom Fernando?

    Cara, muito bom este seu post sobre a DSF. Demorei um tempão para achar uma documentação a respeito.
    Posso utilisar o VB 2005 Express para fazer os scripts necessarios para a simulação do periferico USB?

    Valeu!

    1. Olá Leandro,

      Comigo está tudo bem, obrigado.
      Sim, qualquer linguagem que consiga fazer interface com objectos COM é capaz de realizar esta tarefa. Mas lembre-se de que os scripts apenas utilizam os objetos COM que implementam o periférico. Para desenvolver estes componentes você deveria ter o WDK instalado em sua máquina. Sabendo que o WDK já vem com compilador, você só precisará de um editor de texto para editar os fontes. Este editor de textos poderia ser tanto o notepad como o VC Express (os componentes são implementados em C/C++).
      Se estiver interessado, dê uma olhada na implementação de exemplo dos objetos que está na pasta C:\WinDDK\6000\src\Test\DSF\USB da instalação do WDK.

      Have fun!
      []s.

Leave a Reply

Your email address will not be published.