Erstellen eines virtuellen USB-Geräts
Ich bin ein Neuling lernen, wie man schreiben WDM-Gerätetreiber für USB-Geräte und festgestellt, dass die verfügbaren Materialien sind alle zu schwer zu verstehen (DDK online-doc ist eine der am schwierigsten zu Lesen, und der WDM Device driver Buch von Oney ist nicht alles besser).
So, ich habe eine einfache Frage. Wo soll ich anfangen, wenn ich will erstellen Sie ein virtuelles USB-Gerät (zum Beispiel einem virtuellen USB-Maus, die sieht aus wie eine echte USB-Maus an einem USB port angeschlossen) zum testen/lernen.
So weit, was ich verstehe, ist der HIDClass-Treiber (hidclass.sys) hat eine Minitreiber für den usb-bus (hidusb.sys) , führt die Aufzählung der angeschlossene USB-hardware. Also, wenn ich will, entführen Sie die hardware-enumeration-Prozess und schafft meine eigene virtuelle hardware, sollte ich einen filter-Treiber irgendwo abzufangen einige IRPs, die hardware-enumeration-Prozess?
Sorry, wenn das oben nicht sinnvoll an, da bin ich noch in der Lernphase und dies ist tatsächlich eine der übung, die ich denke, könnten mir helfen, zu lernen über das schreiben-USB-Geräte-Treiber besser.
InformationsquelleAutor der Frage JavaMan | 2011-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Windows verwendet eine Plug-and-Play-Architektur.
Wenn Sie stecken Sie ein USB-Gerät, Es sendet low-level-USB-Anforderung an das Gerät und dann auf der Grundlage der Antwort von einem Gerät, das entscheidet, welche Treiber zu laden. Das Matching erfolgt durch den Vergleich von Hersteller-id, Produkt-id und etc. zu inf-Dateien Abschnitte. Treiber werden in form einer kompilierten xxx.sys mit xxx.inf-Datei geladen wird, um kernel-space. Windows entscheidet, welche xxx.sys zum laden basierend auf den *.inf-Datei an, die mit der Gerätetreiber.
Diese Dateien haben die Abschnitte wie dieser:
(eine genauere Beschreibung, was in
inf
Dateien können gefunden werden auf https://docs.microsoft.com/en-us/windows-hardware/drivers/install/inf-manufacturer-section)Einen detaillierten Blick auf die USB-enumeration-Prozess (Verwenden Sie USB-Logger):
Einem angeschlossenen USB-Gerät, das Sie sehen können, diese Zeichenfolgen unter Verwendung der Geräte-Manager:
Ich habe zum Beispiel ein USB-Speichergerät mit
Device Id = usb\class_08&subclass_06&prot_50
angeschlossen, und dieser string kann abgestimmt werden, um eine.inf
Datei, die Hinzugefügt wurde zu der Liste der bekannten Geräte nach der ersten Aufzählung. Diese Datei ist ein stringService = USBSTOR
, und so wissen wir, dassusbstor.sys
wird verwendet, um eine Schnittstelle mit dieser USB-Massenspeicher-Gerät.Weiter geht es mit matching-Prozess.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
Für disk-on-Taste, können Sie sehen etwas wie:
Für das schreiben von Treibern ist mein Tipp:
InformationsquelleAutor der Antwort Alex.Salnikov
Verwenden Sie Device Simulation Framework (DSF).
http://msdn.microsoft.com/en-us/library/windows/hardware/gg454516.aspx
InformationsquelleAutor der Antwort Amir Saniyan
Verwenden Sie das USB/IP-Projekts zu emulieren jedes Gerät, das Sie möchten. In meinem blog habe ich gezeigt, wie zu emulieren USB-Maus Gerät in python unter Verwendung der USB/IP-Projekts:
http://breaking-the-system.blogspot.com/2014/08/emulating-usb-devices-in-python-with-no.html
Wird es nicht helfen, Sie zu verstehen, wie erstellen Sie die virtuellen USB-Gerät (der Prozess gemacht, die in der USB/IP-Treiber, die Sie Lesen konnte-code), aber Sie wird es schaffen, die virtuellen USB-HID-Gerät, und Sie spielen könnte, mit dem HID-Argumente geschickt, um den USB-Treiber.
InformationsquelleAutor der Antwort Yaron Shani
Würde es nicht mehr Sinn machen einen eigenen bus-Typ und-enumerator?
InformationsquelleAutor der Antwort Simon Richter