Arquitetura e módulos do WinUSB
O WinUSB consiste em dois componentes principais:
- Winusb.sys é um driver de modo kernel que pode ser instalado como um driver de filtro ou de função, acima dos drivers de protocolo na pilha de dispositivos de modo kernel de um dispositivo USB.
- Winusb.dll é uma DLL no modo de usuário que expõe funções WinUSB. Os aplicativos podem usar essas funções para se comunicar com Winusb.sys quando ele é instalado como driver de função de um dispositivo.
Para dispositivos que não exigem um driver de função personalizado, Winusb.sys pode ser instalado na pilha de modo kernel do dispositivo como o driver de função. Os processos do modo de usuário podem se comunicar com Winusb.sys usando um conjunto de solicitações de controle de E/S do dispositivo ou chamando funções WinUSB.
A figura a seguir mostra uma pilha de driver USB que contém várias instâncias de Winusb.sys.
A figura anterior mostra um exemplo de configuração do WinUSB que implementa três classes de interface de dispositivo, cada uma com uma única interface de dispositivo registrada:
- A instância 1 do Winusb.sys registra a interface do dispositivo A, que oferece suporte a um driver de modo de usuário (Usboem.dll).
- A instância 2 do Winusb.sys registra a interface do dispositivo B, que dá suporte a um driver de modo de usuário para um scanner (Usbscan.exe) que se comunica com Winusb.dll usando um serviço do sistema (SVCHOST).
- A instância 3 do Winusb.sys registra a interface do dispositivo C, que oferece suporte a um utilitário de atualização de firmware (Usbfw.exe).
Há exatamente uma instância carregada de Winusb.sys. Um objeto de dispositivo físico (PDO) pode representar um dispositivo não composto (instância 1 no diagrama) ou pode representar uma interface ou coleção de interface em um dispositivo composto (instâncias 2 e 3). Para dispositivos WMCDC (classe de dispositivo de comunicação móvel sem fio USB), um PDO pode até representar várias coleções de interface. (Para obter mais informações sobre PDOs para dispositivos WMCDC, consulte Suporte para a classe de dispositivo de comunicação móvel sem fio).
Qualquer aplicativo de modo de usuário pode se comunicar com a pilha USB carregando a biblioteca de vínculo dinâmico WinUSB (Winusb.dll) e chamando as funções WinUSB expostas por esse módulo.