Compartir a través de


Aplicación de escritorio de Windows para un dispositivo USB

En este artículo, obtendrá información sobre cómo una aplicación puede llamar a funciones de WinUSB para comunicarse con un dispositivo USB. Para esta aplicación, WinUSB (Winusb.sys) debe instalarse como controlador de función del dispositivo. WinUSB en la pila del modo kernel del dispositivo. Este controlador se incluye en Windows en la carpeta \Windows\System32\drivers.

Si usa Winusb.sys como controlador de funciones de un dispositivo USB, puede llamar a las funciones de WinUSB desde una aplicación para comunicarse con el dispositivo. Estas funciones, expuestas por el archivo DLL en modo de usuario Winusb.dll, simplifican el proceso de comunicación. En lugar de construir solicitudes de control de E/S de dispositivo para realizar operaciones USB estándar (como configurar el dispositivo, enviar solicitudes de control y transferir datos hacia o desde el dispositivo), las aplicaciones llaman a la función WinUSB equivalente.

Winusb.dll usa los datos proporcionados por la aplicación para construir la solicitud de control de E/S de dispositivo adecuada y, a continuación, envía la solicitud a Winusb.sys para su procesamiento. Para comunicarse con la pila USB, la función WinUSB llama a la función DeviceIoControl con el IOCTL adecuado que se correlaciona con la solicitud de la aplicación. Una vez completada la solicitud, la función WinUSB pasa cualquier información devuelta por Winusb.sys (por ejemplo, datos de una solicitud de lectura) al proceso de llamada. Si la llamada a DeviceIoControl se realiza correctamente, devuelve un valor distinto de cero. Si se produce un error en la llamada o está pendiente (no se procesa inmediatamente), DeviceIoControl devuelve un valor cero. Si se produce un error, la aplicación puede llamar a GetLastError para obtener un mensaje de error más detallado.

Es más sencillo usar funciones de WinUSB para comunicarse con un dispositivo que para implementar un controlador. Sin embargo, tenga en cuenta las siguientes limitaciones:

  • Las funciones winUSB permiten que una aplicación a la vez se comunique con el dispositivo. Si necesita más de una aplicación para comunicarse simultáneamente con un dispositivo, debe implementar un controlador de función.

  • Antes de Windows 8.1, las funciones WinUSB no admiten datos de streaming hacia ni desde puntos de conexión isocrónicos.

  • Las funciones winUSB no admiten dispositivos que ya tengan compatibilidad con el modo kernel. Algunos ejemplos de estos dispositivos son módems y adaptadores de red, que son compatibles con la API de telefonía (TAPI) y NDIS, respectivamente.

  • En el caso de los dispositivos multifunción, puede usar el archivo INF del dispositivo para especificar un controlador en modo kernel o Winusb.sys para cada función USB por separado. Sin embargo, solo puede especificar una de estas opciones para una función determinada, no ambas.

Nota:

Las funciones winUSB requieren Windows XP o posterior. Puede usar estas funciones en la aplicación de C/C++ para comunicarse con el dispositivo USB. Para escribir una aplicación para UWP que usa las API de WinUSB, consulta Aplicación para UWP para un dispositivo USB.

Introducción

  1. Obtener las herramientas necesarias para escribir una aplicación de escritorio de Windows para dispositivos

    • Siga las instrucciones que se indican en Descargar el Kit de controladores de Windows.
  2. Obtenga un dispositivo USB de prueba y su especificación de hardware.

    • Use la especificación para determinar la funcionalidad de la aplicación y las decisiones de diseño relacionadas.

    • Los dispositivos microsoft USB Test Tool (MUTT) están disponibles en JJG Technologies. Este dispositivo requiere firmware de Microsoft disponible en Descargar paquete de software MUTT.

  3. Escriba una aplicación de esqueleto que obtenga un identificador para el dispositivo.

    Hay dos enfoques para escribir la primera aplicación:

  4. Instale Winusb.sys para el dispositivo.

    Si usa Visual Studio, instale el paquete de controladores en el equipo de destino mediante la implementación de Visual Studio. Para obtener instrucciones, consulte Escritura de una aplicación de escritorio de Windows basada en la plantilla winUSB. De lo contrario, instale manualmente el controlador en Administrador de dispositivos escribiendo un INF personalizado. Para obtener más información, consulte Instalación de WinUSB (Winusb.sys).

  5. Obtenga información sobre el dispositivo y vea sus descriptores.

    Para obtener información conceptual, consulte Conceptos para todos los desarrolladores USB. Obtenga información sobre las funcionalidades del dispositivo leyendo el descriptor de configuración, los descriptores de interfaz para cada configuración alternativa admitida y sus descriptores de punto de conexión. Para obtener más información, consulte Consulta del dispositivo para descriptores USB.

  6. Enviar una transferencia de control USB.

    Envíe solicitudes de control estándar y comandos de proveedor al dispositivo. Para obtener más información, vea Enviar transferencia de control al punto de conexión predeterminado.

  7. Enviar transferencias masivas o de interrupción.

    Realice operaciones de lectura y escritura en y desde los puntos de conexión masivos, de interrupción e isócronos admitidos por el dispositivo. Para obtener más información, consulte Solicitudes de E/S de problemas.

  8. Enviar transferencias isócrónicas.

    Enviar solicitudes de lectura y escritura isócrónicas, que se usan principalmente para los datos de streaming. Esta característica solo está disponible en Windows 8.1 y versiones posteriores. Para obtener más información, consulte Envío de transferencias isocronosas USB desde una aplicación de escritorio winUSB.

Consulte también