Depuración de acceso denegado en libusb y drivers WinUSB: permisos, Zadig y claims de interfaz
Cómo resolver los errores típicos de acceso denegado en libusb, problemas de enlace del driver WinUSB, fallos al instalar drivers con Zadig, claims del driver de kernel y permisos sobre interfaces USB.
Las herramientas de desarrollo USB suelen fallar con errores del tipo LIBUSB_ERROR_ACCESS, "access denied", "cannot claim interface", "WinUSB driver not found", "Zadig driver install failed" o "resource already exists". Los usuarios buscan "libusb access denied", "WinUSB driver not binding", "Zadig failed", "libusb cannot claim interface" y "USB permission denied" cuando el dispositivo aparece en el sistema operativo pero la herramienta de diagnóstico o firmware no consigue abrirlo.
Bus Scope ayuda porque los problemas de acceso están a caballo entre los descriptores USB, el binding del driver del SO y los claims de interfaz a nivel de aplicación. El dispositivo puede estar conectado físicamente y enumerar bien, y aun así ser inaccesible para libusb.
Que el dispositivo exista no significa que la interfaz sea accesible
El dispositivo USB puede enumerar sin problemas:
- Device descriptor leído.
- Configuración seleccionada.
- Interfaces visibles.
- Endpoints descritos.
- El sistema operativo muestra el dispositivo.
Y aun así libusb no puede abrir ni reclamar la interfaz objetivo porque otro driver la tiene, faltan permisos, WinUSB no está enlazado o la aplicación apunta a la interfaz equivocada.
Windows y WinUSB
En Windows, el acceso estilo libusb suele requerir un driver compatible como WinUSB enlazado a la interfaz objetivo. Herramientas como Zadig se usan a menudo para reemplazar o instalar el driver de una interfaz vendor-specific.
Problemas habituales:
- Interfaz mal seleccionada en Zadig.
- Dispositivo compuesto con varias interfaces.
- Driver HID que ya tiene la interfaz.
- Paquete de driver existente en conflicto.
- Instalación del driver bloqueada por política.
- VID/PID distintos en modo bootloader.
- Microsoft OS descriptors apuntando a la interfaz equivocada.
En dispositivos compuestos, reemplazar el driver de la interfaz incorrecta puede romper otra función sin arreglar la herramienta objetivo.
Permisos en Linux
En Linux, LIBUSB_ERROR_ACCESS significa casi siempre que al usuario le falta permiso para abrir el nodo del dispositivo. El dispositivo está, pero las reglas udev o la pertenencia al grupo no conceden acceso.
Una captura puede mostrar que hay tráfico USB, pero los errores de permiso pueden requerir evidencia a nivel de SO. Distingue entre:
- Dispositivo que no enumera.
- Dispositivo que enumera pero no hay permiso.
- Driver de kernel ya enlazado.
- Aplicación que apunta a un VID/PID o interfaz equivocados.
El driver de kernel ya tiene la interfaz
Si un driver de kernel tiene la interfaz, libusb puede necesitar detacharlo, o la aplicación debe usar la API del driver de kernel en su lugar. Las interfaces HID, CDC, storage y audio suelen ser reclamadas por drivers de inbox.
La respuesta segura depende de la intención del producto. Para un teclado o un dispositivo de almacenamiento, detachar el driver puede romper el comportamiento normal del sistema. Para una interfaz vendor-specific de diagnóstico, enlazar WinUSB/libusb puede ser lo correcto.
Checklist de depuración
Usa este flujo:
- Captura la enumeración y los descriptores.
- Identifica el número de interfaz objetivo.
- Comprueba si el dispositivo es compuesto.
- En Windows, confirma el driver enlazado a esa interfaz.
- En Linux, confirma permisos y reglas udev.
- Comprueba si un driver de kernel ya tiene la interfaz.
- Verifica el VID/PID en modo normal y bootloader.
- Confirma que la aplicación apunta a la interfaz correcta.
- Evita reemplazar drivers de interfaces no relacionadas.
- Conserva la evidencia de descriptores antes de tocar el binding de drivers.
Diagnóstico final
libusb access denied y los fallos de binding de WinUSB rara vez son problemas de señal USB cruda. Son problemas de ownership de interfaz, permisos, binding de driver o mapeo de descriptores.
Bus Scope ayuda exponiendo qué interfaces existen y cómo enumera el dispositivo, para que los errores de acceso se puedan rastrear hasta la capa correcta en lugar de reinstalar drivers a ciegas.