HID Device Desc. Srnnmr. auslesen



  • Hallo

    Wie kann ich denn mittels der Funktionen in der Setupapi.dll aus einem HID Device Deskriptor die Strings für die Seriennummern, Manufcturer String und Productstring auslesen?

    Gibt es über die Funktionen der setupapi.dll Infos und Beispiele für die Funktionen? Ich hangele mich derzeit in der MSDN von Funktion zu Funktion komme aber nicht weiter.





  • Hmm, ich glaube, da steh ich genau vor dem selben Problem, wie das letze mal. Hab es bis heute noch nicht geschafft das WDK zu bekommen.
    Hab wahrscheinlich auch gleich wieder nen ungeeigneten Titel gewählt. -> Werde den Threadtitel gleich mal ändern.

    Versuchen wir mal das Pferd von der anderen Seite aufzuziehen. Gibt es in der Setupapi.dll eine Funktion, mit der ich meine Seriennummern aus einem HID Device Deskriptor auslesen kann? Ich meine eine Verbindung kann ich ja auch aufbauen. D.h. ich kann ja die Vendor und die Product ID auslesen. (SetupDiGetDeviceRegistryProperty(...))
    Da gibts doch sicherlich auch ne Funktion, mit dem ich den Rest noch ausgeben kann.

    Zu den genannten Funktionen:

    Für diese Funktionen brauchen ich ja ein Handle zu dem Device. Gibt es noch eine Möglichkeit die Informationen ohne dieses Handle auszulesen? Ich denke da an SP_DRVINFO_DATA und SetupDiEnumDriverInfo. Wobei ich mir nicht sicher bin, ob diese Funktion die Werte liefern kann.



  • Nein, in setupapi.dll gibt es nichts, wozu brauchst Du das auch doppelt? Verwende einfach die hid.dll und gut ist's, dafür ist das Dingens schließlich da. Um mich nochmal zu wiederholen: "Wenn ich das richtig sehe, bekommst Du das WDK auch über die Connect - Seiten. Es kann gut sein, dass es hier mit einer Anmeldung getan ist. Ich hab's jetzt aber nicht probiert."

    Hast Du es denn wenigstens probiert?



  • Hi, Download des WDK for Windows Server 2008 - Build 6001_18002 läuft nun. Du hattest recht über die Connect Seite gings. Hatte sogar schon eine LiveID. Mußte nur die alten Emails ausgraben, und das Kennwort suchen 😉

    Bin mal gespannt was mir das bringt.

    Brauchen tue ich das für folgendes Szenario.

    Unser Produkt, (USB HID Device) kann mehrfach an einen PC angeschlossen werden. Wie du weißt, wird mit den Standardhandles aus CreateFile eine Verbindung aufgebaut. Um nun zu identifizieren, ob das Gerät schon initialisiert wurde, will ich nun die Seriennummer auslesen und mir während der Laufzeit speichern um vergleichen zu können ob das Gerät schon mal initialisiert wurde.
    Idealerweise wollte ich das dann machen, wenn ich die Vendor- und ProductID des Gerätes habe, denn dann kann ich die initialisierten und nicht initialisierten Geräte noch ohne großen Aufwand unterscheiden. Wenn du nun sagst, dass es nur mit den entsprechenden HID Befehlen geht, muß ich mir nochmal Gedanken machen, ob ich da Extra den Device Deskriptor als Übertragungsmedium nehme, oder nicht einfach nur eine Funktion in den µC programmiere, mit der ich dann die Seriennummer auslesen kann.



  • daimonion schrieb:

    Bin mal gespannt was mir das bringt.

    Zumindest bringt es Dir die Möglichkeit, vernünftig auf Dein Gerät zuzugreifen. 🙂

    daimonion schrieb:

    Idealerweise wollte ich das dann machen, wenn ich die Vendor- und ProductID des Gerätes habe, denn dann kann ich die initialisierten und nicht initialisierten Geräte noch ohne großen Aufwand unterscheiden. Wenn du nun sagst, dass es nur mit den entsprechenden HID Befehlen geht, muß ich mir nochmal Gedanken machen, ob ich da Extra den Device Deskriptor als Übertragungsmedium nehme, oder nicht einfach nur eine Funktion in den µC programmiere, mit der ich dann die Seriennummer auslesen kann.

    Eine besseres Unterscheidungs-Merkmal als die Seriennummer gibt es doch gar nicht. Jedenfalls mache ich das immer so. Allerdings bin ich mir nicht sicher, was ein "extra" Device Descriptor sein soll. Der Host liest Deinen Device Descriptor und fertig. Ich weiß nicht wo da noch ein "extra" Device Descriptor Platz finden soll. Auch weiß ich eben nicht, wozu Du eigens eine Funktion für die Seriennummer im uC benötigst. Du brauchst doch lediglich den entsprechenden Descriptor während des Standard GET_DESCRIPTOR Requests zurückzugeben. Auf Seiten des Hosts rufst Du HidD_GetSerialNumberString auf und fertig ist's.

    BTW: Willst Du VID und PID des Gerätes lesen, kannst Du das ganz einfach per HidD_GetAttributes erledigen. Du brauchst dich also nicht länger durch die Registry zu quälen. 😉


Anmelden zum Antworten