libusb Access Denied e depuração de driver WinUSB: permissões, Zadig, drivers de kernel e claims USB
Como diagnosticar libusb access denied, WinUSB que não vincula, falha ao instalar driver pelo Zadig, claims de kernel driver, permissões e falhas de claim de interface USB.
Ferramentas de desenvolvimento USB frequentemente falham com erros do tipo LIBUSB_ERROR_ACCESS, "access denied", "cannot claim interface", "WinUSB driver not found", "Zadig driver install failed" ou "resource already exists". Quem busca por "libusb access denied", "WinUSB driver not binding", "Zadig failed", "libusb cannot claim interface" e "USB permission denied" geralmente vê o dispositivo aparecer no SO, mas a ferramenta de diagnóstico ou firmware não consegue abrir.
O Bus Scope ajuda porque problemas de acesso ficam entre os descritores USB, o vínculo de driver do sistema operacional e os claims de interface na camada de aplicação. O dispositivo pode estar fisicamente conectado e enumerando corretamente, e ainda assim indisponível para o libusb.
Dispositivo existir não significa que a interface está acessível
O dispositivo USB pode enumerar corretamente:
- Device descriptor lido.
- Configuração selecionada.
- Interfaces visíveis.
- Endpoints descritos.
- O sistema operacional mostra o dispositivo.
Mesmo assim o libusb não consegue abrir ou fazer claim da interface desejada porque outro driver é dono dela, faltam permissões, o WinUSB não foi vinculado ou a aplicação mira a interface errada.
Windows e WinUSB
No Windows, o acesso estilo libusb geralmente exige um driver compatível, como o WinUSB, vinculado à interface alvo. Ferramentas como o Zadig são usadas para substituir ou instalar um driver para uma interface vendor-specific.
Problemas comuns:
- Interface errada selecionada no Zadig.
- Dispositivo composto com várias interfaces.
- Driver HID é dono da interface.
- Conflito com pacote de driver existente.
- Instalação de driver bloqueada por política.
- Dispositivo expõe VID/PID diferente em modo bootloader.
- Descritores Microsoft OS apontam para a interface errada.
Em dispositivos compostos, trocar o driver da interface errada pode quebrar outra função sem consertar a ferramenta alvo.
Permissões no Linux
No Linux, LIBUSB_ERROR_ACCESS geralmente significa que o usuário não tem permissão para abrir o node do dispositivo. O dispositivo está presente, mas regras de udev ou o grupo não permitem o acesso.
Um trace pode mostrar que o tráfego USB existe, mas erros de permissão ainda precisam de evidência em nível de SO. Distinga:
- Dispositivo não está enumerando.
- Dispositivo enumera, mas não há permissão.
- Kernel driver já vinculado.
- Aplicação mirando VID/PID ou interface errados.
Kernel driver já reivindicou a interface
Se um kernel driver é dono de uma interface, o libusb pode precisar detachá-lo, ou a aplicação precisa usar a API de kernel driver. Interfaces HID, CDC, storage e audio são comumente reivindicadas por drivers inbox.
A resposta segura depende da intenção do produto. Para um teclado ou dispositivo de armazenamento, detachar o kernel driver pode atrapalhar o comportamento normal do sistema. Para uma interface vendor-specific de diagnóstico, vincular WinUSB/libusb pode ser o correto.
Checklist de depuração
Use este fluxo:
- Capture a enumeração e os descritores.
- Identifique o número da interface alvo.
- Confira se o dispositivo é composto.
- No Windows, confirme o driver vinculado àquela interface.
- No Linux, confirme permissões e regras de udev.
- Confira se um kernel driver já é dono da interface.
- Verifique VID/PID em modo normal e em bootloader.
- Confirme que a aplicação mira a interface correta.
- Evite trocar drivers de interfaces que não são alvo.
- Preserve a evidência de descritores antes de mudar o vínculo de driver.
Diagnóstico final
libusb access denied e falhas de vinculação do WinUSB geralmente não são problemas brutos de sinal USB. São problemas de propriedade de interface, permissão, vínculo de driver ou mapeamento de descritor.
O Bus Scope ajuda expondo quais interfaces existem e como o dispositivo enumera, para que erros de acesso sejam rastreados até a camada correta em vez de reinstalar drivers no escuro.