Übersicht über die Entwicklung von Windows-Anwendungen für USB-Geräte

Zusammenfassung:

  • Richtlinien für die Auswahl des richtigen Programmiermodells
  • Entwicklererfahrung für UWP-Apps und Desktop-Apps

Wichtige APIs:

Dieser Artikel enthält Richtlinien für die Entscheidung, ob Sie eine UWP-App oder eine Windows-Desktop-App für die Kommunikation mit einem USB-Gerät schreiben sollten.

Windows stellt API-Sätze bereit, mit denen Sie Apps schreiben können, die mit benutzerdefinierten USB-Geräten kommunizieren. Die API führt allgemeine USB-bezogene Aufgaben aus, z. B. das Suchen des Geräts, Datenübertragungen.

Benutzerdefiniertes Gerät bedeutet in diesem Kontext ein Gerät, für das Microsoft keinen mitgelieferten Klassentreiber bereitstellt. Stattdessen können Sie WinUSB (Winusb.sys) als Gerätetreiber installieren.

Auswählen eines Programmiermodells

Wenn Sie Winusb.sysinstallieren, finden Sie die folgenden Programmiermodelloptionen:

Die Strategie für die Wahl des besten Programmiermodells hängt von verschiedenen Faktoren ab.

  • Kommuniziert Ihre App mit einem internen USB-Gerät?

    Die APIs sind in erster Linie für den Zugriff auf Peripheriegeräte konzipiert. Die API kann auch auf pcinterne USB-Geräte zugreifen. Der Zugriff auf pcinterne USB-Geräte über eine UWP-App ist jedoch auf eine privilegierte App beschränkt, die vom OEM für diesen PC explizit in den Gerätemetadaten deklariert wird.

  • Kommuniziert Ihre App mit isochronen USB-Endpunkten?

    Wenn Ihre App Daten an oder von isochronen Endpunkten des Geräts überträgt, müssen Sie eine Windows-Desktop-App schreiben. In Windows 8.1 wurden dem API-Satz neue WinUSB-Funktionen hinzugefügt, die es einer Desktop-App ermöglichen, Daten an isochrone Endpunkte zu senden und von diesen zu empfangen.

  • Handelt es sich bei Ihrer App um eine App vom Typ "Systemsteuerung"?

    UWP-Apps sind Benutzer-Apps, die nicht in der Lage sind, Änderungen außerhalb des Bereichs der einzelnen Apps vorzunehmen. Für diese Arten von Apps müssen Sie eine Windows-Desktop-App schreiben.

  • Unterstützt die USB-Geräteklasse Klassen von UWP-Apps?

    Schreiben Sie eine UWP-App, wenn Ihr Gerät zu einer dieser Geräteklassen gehört.

    • name:cdcControl, classId:02 * *
    • name:physical, classId:05 * *
    • name:personalHealthcare, classId:0f 00 00
    • name:activeSync, classId:ef 01 01
    • name:palmSync, classId:ef 01 02
    • name:deviceFirmwareUpdate, classId:fe 01 01
    • name:irda, classId:fe 02 00
    • name:measurement, classId:fe 03 *
    • name:vendorSpecific, classId:ff * *

    Hinweis

    Wenn Ihr Gerät zur DeviceFirmwareUpdate-Klasse gehört, muss es sich bei Ihrer App um eine privilegierte App handeln.

Wenn Ihr Gerät nicht zu einer der vorherigen Geräteklassen gehört, schreiben Sie eine Windows-Desktop-App.

Treiberanforderung

Treiberanforderung UWP-App Windows Desktop-App
Funktionstreiber Von Microsoft bereitgestellte Winusb.sys (Kernelmodustreiber). Von Microsoft bereitgestellte Winusb.sys (Kernelmodustreiber).
Filtertreiber Wenn Filtertreiber vorhanden sind, ist der Zugriff auf privilegierte Apps beschränkt. Die App wird vom OEM in Gerätemetadaten als privilegierte Apps deklariert. Der Filtertreiber kann im Kernelmodus-Gerätestapel vorhanden sein, solange er den Zugriff auf Winusb.sysnicht blockiert.

Codebeispiele

Beispiel UWP-App Windows Desktop-App
Erste Schritte mit diesen Beispielen

Entwicklungstools

Entwicklungstools UWP-App Windows Desktop-App
Entwicklerumgebung Microsoft Visual Studio 2013

Microsoft Windows Software Development Kit (SDK) für Windows 8.1
Verwenden Sie die WinUSB-Anwendungsvorlage , die in Visual Studio (Ultimate oder Professional) und Windows Driver Kit (WDK) 8 oder höher enthalten ist.

Für isochrone Übertragungen Visual Studio 2013 mit Windows Driver Kit (WDK) 8.1 oder höher.
Programmiersprachen C#, VB.NET, C++, JavaScript C/C++

Featureimplementierung

Schlüsselszenario UWP-App Windows Desktop-App
Geräteermittlung Verwenden Sie den Windows.Devices.Enumeration-Namespace , um ein UsbDevice abzurufen. Verwenden Sie SetupAPI und WinUsb_Initialize , um eine WINUSB_INTERFACE_HANDLE zu erhalten.
USB-Steuerübertragung UsbSetupPacket
UsbControlRequestType
UsbDevice.SendControlInTransferAsync
UsbDevice.SendControlOutTransferAsync
WINUSB_SETUP_PACKET
WinUsb_ControlTransfer
Abrufen von USB-Deskriptoren UsbDevice.DeviceDescriptor
UsbConfiguration.Descriptors
UsbInterface.Descriptors
UsbEndpointDescriptor
WinUsb_GetDescriptor
Senden von USB-Massenübertragungen UsbBulkInPipe
UsbBulkOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
Senden der USB-Interruptübertragung UsbInterruptInPipe
UsbInterruptOutPipe
WinUsb_ReadPipe
WinUsb_WritePipe
Senden einer isochronen USB-Übertragung Wird nicht unterstützt. WinUsb_ReadIsochPipe
WinUsb_ReadIsochPipeAsap
WinUsb_WriteIsochPipe
WinUsb_WriteIsochPipeAsap
Schließen des Geräts UsbDevice.Close WinUsb_Free

Dokumentation

Dokumentation UWP-App Windows Desktop-App
Programmierhandbuch Kommunikation mit USB-Geräten von Anfang bis Ende Zugreifen auf ein USB-Gerät mithilfe von WinUSB-Funktionen
API-Referenz Windows.Devices.Usb WinUSB-Funktionen