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 mithilfe der USB-Geräteobjektmethoden ausführen kann, die von Windows Driver Frameworks (WDF) bereitgestellt werden.
Sie enthält die folgenden Abschnitte:
- Erstellen eines USB-Geräteobjekts
- Konfigurieren eines USB-Geräts
- Abrufen von Geräteinformationen
- Abrufen von USB-Deskriptoren
- Senden einer Steuerungsübertragung
- Zurücksetzen und Power-Cycling des Geräteports
- Senden einer URB an ein Gerät
Schritt-für-Schritt-Anweisungen zum Schreiben eines einfachen KMDF-basierten USB-Clienttreibers finden Sie unter Schreiben Ihres ersten USB-Clienttreibers (KMDF).
Erstellen eines USB-Geräteobjekts
Um die USB-E/A-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 über seine Rückruffunktion EvtDevicePrepareHardware auf.
Wenn der Treiber WdfUsbTargetDeviceCreateWithParameters aufruft, erstellt das Framework ein WDFUSBDEVICE-Objekt und ordnet es der FDO zu, die das USB-Gerät darstellt. Die -Methode gibt ein Handle an 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 Aufruf 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 auch ein Framework-USB-Schnittstellenobjekt für jede USB-Schnittstelle, die die erste Konfiguration des Geräts enthält.
Nach dem Aufruf von WdfUsbTargetDeviceCreateWithParameters muss der Clienttreiber WdfUsbTargetDeviceSelectConfig aufrufen, um eine Konfiguration auszuwählen. Diese Methode erstellt Frameworkschnittstellenobjekte für jede alternative Einstellung der Schnittstelle in der ausgewählten Konfiguration.
Die Methode erstellt auch 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 dekonfigurieren.
Verwandte Informationen
- Auswählen einer Konfiguration für ein USB-Gerät
- Auswählen einer alternativen Einstellung in einer USB-Schnittstelle
Abrufen von Geräteinformationen
Nach dem Konfigurieren eines Geräts kann Ihr Clienttreiber die folgenden Methoden aufrufen, um Informationen zu einem 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-Konfigurationsdeskriptoren, 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 standard-, geräteklassenspezifische oder herstellerspezifische USB-Steuerungsübertragung beschreibt.
WdfUsbTargetDeviceSendControlTransferSynchronly
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 des Geräteports
Ihr Treiber kann die folgenden Methoden aufrufen, um den USB-Anschluss zurückzusetzen oder einzuschalten, mit dem ein Gerät verbunden ist:
WdfUsbTargetDeviceResetPortSynchronously
Sendet synchron eine Anforderung zum Zurücksetzen des USB-Anschlusses eines Geräts.
WdfUsbTargetDeviceCyclePortSynchronously (nur KMDF)
Sendet synchron eine Anforderung zum Einschalten des USB-Anschlusses eines Geräts.
WdfUsbTargetDeviceFormatRequestForCyclePort (nur KMDF)
Formatiert eine Anforderung zum Einschalten des USB-Anschlusses eines Geräts. Der Treiber muss WdfRequestSend aufrufen, um die Anforderung synchron oder asynchron zu senden.
Verwandte Informationen finden Sie unter Wiederherstellen von USB-Pipefehlern.
Senden einer URB an ein Gerät
Wenn Ihr KMDF-Treiber mit dem 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-Anforderung, die eine URB enthält.
WdfUsbTargetDeviceFormatRequestForUrb (nur KMDF)
Formatiert eine E/A-Anforderung, die eine URB enthält. Der Treiber muss WdfRequestSend aufrufen, um die Anforderung synchron oder asynchron zu senden.
WdfUsbTargetDeviceWdmGetConfigurationHandle (nur KMDF)
Gibt das USBD-Konfigurationshandle eines Geräts zurück. Für einige URBs ist dieses Handle erforderlich.
Allgemeine konzeptionelle Hintergrundinformationen zu URBs finden Sie unter Zuweisung und Erstellen von URBs.