Partilhar via


Aplicativo da área de trabalho do Windows para um dispositivo USB

Neste artigo, você aprenderá como um aplicativo pode chamar as funções do WinUSB para se comunicar com um dispositivo USB. Para esse aplicativo, o WinUSB (Winusb.sys) deve ser instalado como o driver de função do dispositivo. WinUSB na pilha do modo kernel do dispositivo. Esse driver está incluído no Windows na pasta \Windows\System32\drivers.

Se você estiver usando Winusb.sys como driver de função de um dispositivo USB, poderá chamar funções WinUSB de um aplicativo para se comunicar com o dispositivo. Essas funções, expostas pela DLL do modo de usuário Winusb.dll, simplificam o processo de comunicação. Em vez de construir solicitações de controle de E/S do dispositivo para executar operações USB padrão (como configurar o dispositivo, enviar solicitações de controle e transferir dados de ou para o dispositivo), os aplicativos chamam a função WinUSB equivalente.

Winusb.dll usa os dados fornecidos pelo aplicativo para construir a solicitação de controle de E/S do dispositivo apropriada e envia a solicitação para Winusb.sys para processamento. Para se comunicar com a pilha USB, a função WinUSB chama a função DeviceIoControl com o IOCTL apropriado que se correlaciona à solicitação do aplicativo. Quando a solicitação for concluída, a função WinUSB passará todas as informações retornadas por Winusb.sys (como dados de uma solicitação de leitura) de volta para o processo de chamada. Se a chamada para DeviceIoControl for bem-sucedida, ela retornará um valor diferente de zero. Se a chamada falhar ou estiver pendente (não processada imediatamente), DeviceIoControl retornará um valor zero. Se ocorrer um erro, o aplicativo poderá chamar GetLastError para obter uma mensagem de erro mais detalhada.

É mais simples usar funções WinUSB para se comunicar com um dispositivo do que implementar um driver. No entanto, observe as seguintes limitações:

  • As funções do WinUSB permitem que um aplicativo de cada vez se comunique com o dispositivo. Se você precisar de mais de um aplicativo para se comunicar simultaneamente com um dispositivo, deverá implementar um driver de função.

  • Antes de Windows 8.1, as funções do WinUSB não dão suporte a dados de streaming de ou para pontos de extremidade isócronos.

  • As funções do WinUSB não dão suporte a dispositivos que já têm suporte ao modo kernel. Exemplos desses dispositivos incluem modems e adaptadores de rede, que são compatíveis com a API de telefonia (TAPI) e o NDIS, respectivamente.

  • Para dispositivos multifuncionais, você pode usar o arquivo INF do dispositivo para especificar um driver no modo kernel in-box ou Winusb.sys para cada função USB separadamente. No entanto, você pode especificar apenas uma dessas opções para uma função específica, não ambas.

Observação

As funções do WinUSB exigem o Windows XP ou posterior. Você pode usar essas funções em seu aplicativo C/C++ para se comunicar com seu dispositivo USB. Para escrever um aplicativo UWP que usa APIs do WinUSB, consulte Aplicativo UWP para um dispositivo USB.

Introdução

  1. Obter as ferramentas necessárias para gravar um aplicativo da área de trabalho do Windows para dispositivos

  2. Obtenha um dispositivo USB de teste e sua especificação de hardware.

    • Use a especificação para determinar a funcionalidade do aplicativo e as decisões de design relacionadas.

    • Os dispositivos MUTT (Microsoft USB Test Tool) estão disponíveis na JJG Technologies. Este dispositivo requer firmware da Microsoft disponível em Baixar Pacote de Software MUTT.

  3. Escreva um aplicativo esqueleto que obtém um identificador para o dispositivo.

    Há duas abordagens para escrever o primeiro aplicativo:

  4. Instale Winusb.sys para seu dispositivo.

    Se estiver usando o Visual Studio, instale o pacote de driver no computador de destino usando a implantação do Visual Studio. Para obter instruções, confira Escrever um aplicativo da área de trabalho do Windows com base no modelo do WinUSB. Caso contrário, instale manualmente o driver no Gerenciador de Dispositivos escrevendo um INF personalizado. Para obter mais informações, consulte Instalação do WinUSB (Winusb.sys).

  5. Obtenha informações sobre seu dispositivo e exiba seus descritores.

    Para obter informações conceituais, consulte Conceitos para todos os desenvolvedores de USB. Obtenha informações sobre os recursos do dispositivo lendo o descritor de configuração, os descritores de interface para cada configuração alternativa com suporte e seus descritores de ponto de extremidade. Para obter mais informações, consulte Consultar o dispositivo para descritores USB.

  6. Enviar uma transferência de controle USB.

    Envie solicitações de controle padrão e comandos de fornecedor para seu dispositivo. Para obter mais informações, consulte Enviar transferência de controle para o ponto de extremidade padrão.

  7. Enviar transferências em massa ou de interrupção.

    Execute operações de leitura e gravação de e para os pontos de extremidade em massa, de interrupção e isócronos compatíveis com seu dispositivo. Para obter mais informações, consulte Solicitações de E/S do problema.

  8. Enviar transferências isocronas.

    Enviar solicitações de leitura e gravação isócronas, usadas principalmente para dados de streaming. Esse recurso só está disponível em Windows 8.1 e posteriores. Para obter mais informações, consulte Envio de transferências isócronas USB de um aplicativo de área de trabalho WinUSB.

Confira também