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.

libusb acceso denegado, WinUSB driver, Zadig, permisos USB, kernel driver, interface claim, diagnóstico 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:

  1. Captura la enumeración y los descriptores.
  2. Identifica el número de interfaz objetivo.
  3. Comprueba si el dispositivo es compuesto.
  4. En Windows, confirma el driver enlazado a esa interfaz.
  5. En Linux, confirma permisos y reglas udev.
  6. Comprueba si un driver de kernel ya tiene la interfaz.
  7. Verifica el VID/PID en modo normal y bootloader.
  8. Confirma que la aplicación apunta a la interfaz correcta.
  9. Evita reemplazar drivers de interfaces no relacionadas.
  10. 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.