Ü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:
-
Windows 8.1 stellt den Windows.Devices.Usb-Namespace bereit, der in früheren Versionen von Windows nicht verwendet werden kann. Weitere Microsoft Store-Ressourcen finden Sie in der Universelle Windows-Plattform-Dokumentation.
Windows-Desktop-App für ein USB-Gerät
Vor Windows 8.1 waren Apps, die über Winusb.syskommunizierten, Desktop-Apps, die mit WinUSB Functions geschrieben wurden. In Windows 8.1 wurde der API-Satz erweitert. Weitere Informationen zur Entwicklung von Windows-Apps finden Sie unter Entwickeln für Windows.
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 |