Freigeben über


Arbeiten mit USB-Geräten

In diesem Thema werden die Vorgänge beschrieben, die ein Kernel-Mode Driver Framework (KMDF) oder User-Mode Driver Framework (UMDF)-Treiber ab Version 2 mit den von Windows Driver Frameworks (WDF) bereitgestellten USB-Geräteobjektmethoden ausführen kann.

Sie enthält die folgenden Abschnitte:

Schritt-für-Schritt-Anleitungen zum Schreiben eines einfachen KMDF-basierten USB-Clienttreibers finden Sie unter How to write your first USB client driver (KMDF).

Erstellen eines USB-Geräteobjekts

Um die USB-I/O-Zielobjekte des Frameworks (WDFUSBDEVICE, WDFUSBINTERFACE und WDFUSBPIPE) zu verwenden, muss ihr Clienttreiber zuerst WdfUsbTargetDeviceCreateWithParameters aufrufen, um ein USB-Geräteobjekt zu erstellen. In der Regel ruft ein Treiber WdfUsbTargetDeviceCreateWithParameters aus seiner EvtDevicePrepareHardware-Rückruffunktion auf.

Wenn der Treiber WdfUsbTargetDeviceCreateWithParameters aufruft, erstellt das Framework ein WDFUSBDEVICE-Objekt und ordnet es dem FDO zu, der das USB-Gerät darstellt. Die Methode gibt ein Handle für das neue Framework-USB-Geräteobjekt zurück, das der USB-Clienttreiber dann für die Kommunikation mit dem physischen Gerät verwenden kann.

Nach dem Aufrufen von WdfUsbTargetDeviceCreateWithParameters kann der Treiber WdfUsbTargetDeviceGetDeviceDescriptor und WdfUsbTargetDeviceRetrieveConfigDescriptor aufrufen, um USB-Deskriptoren vom Gerät abzurufen. Diese Deskriptoren enthalten Informationen zur ersten Konfiguration des Geräts, zu den Schnittstelleneinstellungen und den definierten Endpunkten. (Die USB-Deskriptoren sind in der offiziellen USB-Spezifikation definiert.)

Konfigurieren eines USB-Geräts

Die WdfUsbTargetDeviceCreateWithParameters-Methode erstellt außerdem ein FRAMEWORK-USB-Schnittstellenobjekt für jede USB-Schnittstelle, die die erste Konfiguration des Geräts enthält.

Nach dem Aufrufen von WdfUsbTargetDeviceCreateWithParameters muss der Clienttreiber WdfUsbTargetDeviceSelectConfig aufrufen, um eine Konfiguration auszuwählen. Diese Methode erstellt Framework-Schnittstellenobjekte für jede alternative Einstellung der Schnittstelle in der ausgewählten Konfiguration.

Die Methode erstellt außerdem Pipeobjekte, die Endpunkte darstellen, die in jeder alternativen Einstellung jeder Schnittstelle der ausgewählten Konfiguration definiert sind.

Nachdem Sie eine Konfiguration ausgewählt haben, können Sie bei Bedarf alternative Einstellungen für die Schnittstellen der Konfiguration ändern.

Sie können auch WdfUsbTargetDeviceSelectConfig aufrufen, um ein Gerät zu deconfigieren.

Verwandte Informationen finden Sie unter:

Abrufen von Geräteinformationen

Nach dem Konfigurieren eines Geräts kann Ihr Clienttreiber die folgenden Methoden aufrufen, um Informationen über ein USB-Gerät abzurufen:

WdfUsbTargetDeviceQueryUsbCapability
Bestimmt, ob der Hostcontroller und der USB-Treiberstapel eine bestimmte Funktion unterstützen. Vor dem Aufrufen von WdfUsbTargetDeviceQueryUsbCapability muss ein Treiber WdfUsbTargetDeviceCreateWithParameters aufrufen.

WdfUsbTargetDeviceGetIoTarget
Gibt ein Handle an das E/A-Zielobjekt zurück, das einem USB-Gerät zugeordnet ist. Der Treiber kann dieses Handle an WdfRequestSend oder WdfIoTargetStop übergeben.

WdfUsbTargetDeviceRetrieveInformation
Ruft Versions- und Funktionsinformationen ab, die einem USB-Gerät zugeordnet sind.

WdfUsbTargetDeviceIsConnectedSynchronous (nur KMDF)
Bestimmt, ob das Gerät verbunden ist.

WdfUsbTargetDeviceRetrieveCurrentFrameNumber (nur KMDF)
Ruft die aktuelle USB-Framenummer ab.

Abrufen von USB-Deskriptoren

Um die Unicode-Zeichenfolgen abzurufen, die in den Deskriptoren eines USB-Geräts enthalten sind, kann der Treiber eine der folgenden Methoden aufrufen:

WdfUsbTargetDeviceGetDeviceDescriptor
Ruft den USB-Gerätedeskriptor eines Geräts ab.

WdfUsbTargetDeviceRetrieveConfigDescriptor
Ruft die USB-Konfigurationsdeskriptor, Schnittstellendeskriptoren und Endpunktdeskriptoren eines Geräts ab.

WdfUsbTargetDeviceQueryString
Kopiert eine Unicode-Zeichenfolge in einen vom Treiber bereitgestellten Puffer.

WdfUsbTargetDeviceAllocAndQueryString
Kopiert eine Unicode-Zeichenfolge in einen vom Framework bereitgestellten Puffer.

WdfUsbTargetDeviceFormatRequestForString
Formatiert eine Anforderung für eine Unicode-Zeichenfolge. Der Treiber kann WdfRequestSend- aufrufen, um die Anforderung synchron oder asynchron zu senden.

Senden einer Steuerungsübertragung

Ihr Treiber kann die folgenden Methoden aufrufen, um eine E/A-Anforderung zu senden, die eine standardmäßige, gerätespezifische oder herstellerspezifische USB-Steuerungsübertragung beschreibt.

WdfUsbTargetDeviceSendControlTransferSynchronously
Sendet synchron eine USB-Steuerungsübertragungsanforderung.

WdfUsbTargetDeviceFormatRequestForControlTransfer
Formatiert eine Anforderung für eine USB-Steuerungsübertragung. Der Treiber kann WdfRequestSend- aufrufen, um die Anforderung synchron oder asynchron zu senden.

Verwandte Informationen finden Sie unter Senden einer USB-Steuerübertragung.

Zurücksetzen und Power-Cycling eines Geräteanschlusses

Ihr Treiber kann die folgenden Methoden aufrufen, um den USB-Anschluss zurückzusetzen oder neu zu starten, an den ein Gerät angeschlossen ist.

WdfUsbTargetDeviceResetPortSynchronously
Sendet synchron eine Anforderung, um den USB-Anschluss eines Geräts zurückzusetzen.

WdfUsbTargetDeviceCyclePortSynchronously (nur KMDF)
Sendet synchron eine Anforderung, um den USB-Port eines Geräts aus- und wieder einzuschalten.

WdfUsbTargetDeviceFormatRequestForCyclePort (nur KMDF)
Formuliert eine Anforderung zum Aus- und wieder Einschalten des USB-Ports eines Geräts. Der Treiber muss WdfRequestSend- aufrufen, um die Anforderung synchron oder asynchron zu senden.

Weitere Informationen finden Sie unter So beheben Sie USB-Pipe-Fehler.

Senden einer URB an ein Gerät

Wenn Ihr KMDF-Treiber mit seinem USB-Gerät kommuniziert, indem E/A-Anforderungen gesendet werden, die URBs enthalten, kann der Treiber die folgenden Methoden aufrufen:

WdfUsbTargetDeviceCreateUrb (nur KMDF)
Weist einen USB-Anforderungsblock (URB) zu. Vor dem Aufrufen von WdfUsbTargetDeviceCreateUrb muss ein Treiber WdfUsbTargetDeviceCreateWithParameters aufrufen.

WdfUsbTargetDeviceCreateIsochUrb (nur KMDF)
Weist einen isochronen USB-Anforderungsblock (URB) zu. Vor dem Aufrufen von WdfUsbTargetDeviceCreateIsochUrb muss ein Treiber WdfUsbTargetDeviceCreateWithParameters aufrufen.

WdfUsbTargetDeviceSendUrbSynchronously (nur KMDF)
Sendet synchron eine E/A-Anfrage, die eine URB enthält.

WdfUsbTargetDeviceFormatRequestForUrb (nur KMDF)
Formatiert eine E/A-Anfrage, die ein URB enthält. Der Treiber muss WdfRequestSend- aufrufen, um die Anforderung synchron oder asynchron zu senden.

WdfUsbTargetDeviceWdmGetConfigurationHandle (nur KMDF)
Gibt den USBD-Konfigurations-Handle eines Geräts zurück. Einige URBs benötigen dieses Handle.

Allgemeine konzeptionelle Hintergrundinformationen zu URBs finden Sie unter "Allocating" und "Building URBs".