La especificación USB tiene una especificación de protocolo muy elegante que describe cómo los dispositivos pueden compartir el bus y cómo pueden intercambiar datos. Sin embargo, esa especificación de protocolo no describe en absoluto el formato de los datos, simplemente define la noción de poder entregar trozos de bytes. Depende del dispositivo dar significado a esos bytes.
En el extremo de la máquina, necesita un software para interpretar esos bytes y hacer que la máquina haga algo interesante con ellos. Eso requiere un controlador de dispositivo. Al igual que su tarjeta de video y su tarjeta de interfaz de red requieren un controlador de dispositivo. Obviamente, un controlador de video es muy diferente de un controlador NIC. Lo mismo es cierto para los controladores USB, hay poco en común.
Si desea escribir un software que trate dispositivos USB similares, entonces necesita escribir eso al nivel en el que todavía tienen algo en común. Eso es a nivel del controlador USB, podría escribir un controlador de filtro que se inyecta en la pila del controlador USB y eche un vistazo a los paquetes de solicitud de E/S entre el controlador y el controlador del dispositivo. Similar a, por ejemplo, el controlador de filtro winpcap que espía el tráfico TCP/IP.Aunque no hay mucho interesante que ver, estarías mirando los bloques de bytes que pasan de un lado a otro. Es un problema mucho más grande que winpcap, al menos ve bytes pasar de largo cuyo significado está documentado en algún lugar de un RFC. Ese no es el caso para USB, la compañía que fabrica el dispositivo USB también suele ser el proveedor del controlador del dispositivo. Mantienen el formato interno sin documentar.
Escribir controladores de filtro requiere habilidades bastante avanzadas, hay muchos puntos débiles. Como estrellar el sistema operativo cuando cometes un simple error. También ha habido un flujo considerable en el Modelo de controlador de Windows últimamente, los controladores USB se han movido al anillo 3 (modo de usuario) para mantener el sistema operativo estable.
Para comenzar, descargue Windows WDK (también conocido como "DDK") y lea los libros de Walter Oney. Preferiblemente todos ellos.
No hay funciones estándar de C++ para hacer esto. –
No estoy seguro ... ¿Pueden decirme cómo se puede hacer entonces? – Midas
¿por qué no quieres usar las bibliotecas? – OlimilOops