Share via


Windows-Desktop-App für ein USB-Gerät

In diesem Artikel erfahren Sie, wie eine Anwendung WinUSB-Funktionen aufrufen kann, um mit einem USB-Gerät zu kommunizieren. Für eine solche Anwendung muss WinUSB (Winusb.sys) als Funktionstreiber des Geräts installiert werden. WinUSB im Kernelmodusstapel des Geräts. Dieser Treiber ist in Windows im Ordner \Windows\System32\drivers enthalten.

Wenn Sie Winusb.sys als Funktionstreiber eines USB-Geräts verwenden, können Sie WinUSB-Funktionen aus einer Anwendung aufrufen, um mit dem Gerät zu kommunizieren. Diese Funktionen, die vom BENUTZERmodus-DLL-Winusb.dll verfügbar gemacht werden, vereinfachen den Kommunikationsprozess. Anstatt Geräte-E/A-Steuerungsanforderungen zum Ausführen von USB-Standardvorgängen (z. B. Konfigurieren des Geräts, Senden von Steuerungsanforderungen und Übertragen von Daten an oder vom Gerät) zu erstellen, rufen Anwendungen die entsprechende WinUSB-Funktion auf.

Winusb.dll verwendet die von der Anwendung bereitgestellten Daten, um die entsprechende Geräte-E/A-Steuerungsanforderung zu erstellen, und sendet die Anforderung dann zur Verarbeitung an Winusb.sys. Um mit dem USB-Stapel zu kommunizieren, ruft die WinUSB-Funktion die DeviceIoControl-Funktion mit der entsprechenden IOCTL auf, die mit der Anforderung der Anwendung korreliert. Nach Abschluss der Anforderung übergibt die WinUSB-Funktion alle von Winusb.sys zurückgegebenen Informationen (z. B. Daten aus einer Leseanforderung) an den aufrufenden Prozess zurück. Wenn der Aufruf von DeviceIoControl erfolgreich ist, wird ein Wert ungleich null zurückgegeben. Wenn der Aufruf fehlschlägt oder aussteht (nicht sofort verarbeitet), gibt DeviceIoControl einen Nullwert zurück. Wenn ein Fehler auftritt, kann die Anwendung GetLastError aufrufen, um eine ausführlichere Fehlermeldung zu erhalten.

Es ist einfacher, WinUSB-Funktionen für die Kommunikation mit einem Gerät zu verwenden, als einen Treiber zu implementieren. Beachten Sie jedoch die folgenden Einschränkungen:

  • Mit WinUSB-Funktionen kann jeweils eine Anwendung mit dem Gerät kommunizieren. Wenn Sie mehr als eine Anwendung für die gleichzeitige Kommunikation mit einem Gerät benötigen, müssen Sie einen Funktionstreiber implementieren.

  • Vor Windows 8.1 unterstützen WinUSB-Funktionen das Streaming von Daten zu oder von isochronen Endpunkten nicht.

  • WinUSB-Funktionen unterstützen keine Geräte, die bereits über Kernelmodusunterstützung verfügen. Beispiele für solche Geräte sind Modems und Netzwerkadapter, die von der Telefonie-API (TAPI) bzw. NDIS unterstützt werden.

  • Bei Multifunktionsgeräten können Sie die INF-Datei des Geräts verwenden, um entweder einen mitgelieferten Kernelmodustreiber oder Winusb.sys für jede USB-Funktion separat anzugeben. Sie können jedoch nur eine dieser Optionen für eine bestimmte Funktion angeben, nicht beide.

Hinweis

WinUSB-Funktionen erfordern Windows XP oder höher. Sie können diese Funktionen in Ihrer C/C++-Anwendung verwenden, um mit Ihrem USB-Gerät zu kommunizieren. Informationen zum Schreiben einer UWP-App, die WinUSB-APIs verwendet, finden Sie unter UWP-App für ein USB-Gerät.

Erste Schritte

  1. Abrufen der Tools, die zum Schreiben einer Windows-Desktop-App für Geräte erforderlich sind

  2. Rufen Sie ein USB-Testgerät und dessen Hardwarespezifikation ab.

    • Verwenden Sie die Spezifikation, um die Funktionalität der App und die zugehörigen Entwurfsentscheidungen zu bestimmen.

    • Microsoft USB Test Tool (MUTT)-Geräte sind bei JJG Technologies verfügbar. Dieses Gerät erfordert Firmware von Microsoft, die unter Herunterladen des MUTT-Softwarepakets verfügbar ist.

  3. Schreiben Sie eine skelettierte App, die ein Handle für das Gerät abruft.

    Es gibt zwei Ansätze zum Schreiben der ersten Anwendung:

  4. Installieren Sie Winusb.sys für Ihr Gerät.

    Wenn Sie Visual Studio verwenden, installieren Sie das Treiberpaket mithilfe der Visual Studio-Bereitstellung auf dem Zielcomputer. Anweisungen finden Sie unter Schreiben einer Windows-Desktop-App basierend auf der WinUSB-Vorlage. Installieren Sie den Treiber andernfalls manuell in Geräte-Manager, indem Sie ein benutzerdefiniertes INF schreiben. Weitere Informationen finden Sie unter WinUSB -Installation (Winusb.sys).

  5. Rufen Sie Informationen zu Ihrem Gerät ab, und zeigen Sie dessen Deskriptoren an.

    Konzeptionelle Informationen finden Sie unter Konzepte für alle USB-Entwickler. Rufen Sie Informationen zu Ihren Gerätefunktionen ab, indem Sie den Konfigurationsdeskriptor, schnittstellendeskriptoren für die einzelnen unterstützten alternativen Einstellungen und deren Endpunktdeskriptoren lesen. Weitere Informationen finden Sie unter Abfragen des Geräts nach USB-Deskriptoren.

  6. Senden sie eine USB-Steuerübertragung.

    Senden Sie Standardsteuerungsanforderungen und Anbieterbefehle an Ihr Gerät. Weitere Informationen finden Sie unter Senden der Steuerungsübertragung an den Standardendpunkt.

  7. Senden von Massen- oder Unterbrechungsübertragungen.

    Führen Sie Lese- und Schreibvorgänge zu den massen- und unterbrechungsgeschützten Endpunkten aus, die von Ihrem Gerät unterstützt werden. Weitere Informationen finden Sie unter Problem-E/A-Anforderungen.

  8. Senden sie isochrone Übertragungen.

    Senden sie isochrone Lese- und Schreibanforderungen, die hauptsächlich zum Streamen von Daten verwendet werden. Dieses Feature ist nur auf Windows 8.1 und höher verfügbar. Weitere Informationen finden Sie unter Senden isochroner USB-Übertragungen von einer WinUSB-Desktop-App.

Weitere Informationen