Wie erhalte ich USB_DEVICE_DESCRIPTOR unter Angabe eines Gerätepfads?

Ich konnte USB-Geräte mit der SetupAPI auflisten, und ich habe mir die Anwendung "usbview" im WDK angesehen, aber ich kann immer noch nicht herausfinden, wie ich an das @ komm USB_DEVICE_DESCRIPTOR.

Ich würde es lieber vermeiden, WMI zu verwenden. DeviceIoControl wird von der Beispiel-App "usbview" verwendet. Dies funktioniert jedoch nur, wenn Sie Geräte in einem Hub auflisten. Ich nehme an, wenn ich mit einem bestimmten Gerätepfad (oder einer bestimmten ID) zum übergeordneten Hub (und Port) gelangen kann, funktioniert diese Methode möglicherweise, aber ich konnte auch nicht feststellen, wie dies zu tun ist.Ich habe eine Gerätemischung, für die ich den Deskriptor erhalten möchte. Einige davon sind HIDs, andere möglicherweise WinUsb.sys-Geräte. Wenn es sich um WinUsb-Geräte handelt, kann ich @ verwende WinUsb_GetDescriptor, aber das funktioniert nicht für HIDs (und ich weiß nicht, wie ich den Unterschied zwischen ihnen von der ID- oder Pfad- ... Schnittstellenklasse unterscheiden kann, denke ich?).Ich könnte benutzen SetupDiGetDeviceRegistryProperty aber in der Liste der verfügbaren Eigenschaften kann ich die Zeichenfolge des Herstellers sehen, aber nicht die Hersteller-ID.Ich könnte diesen Wert möglicherweise aus dem Gerätepfad oder der Geräte-ID analysieren, aber das scheint irgendwie ... hackig zu sein. Ist es das, was die Leute tun? Außerdem habe ich immer noch andere Möglichkeiten, wenn ich andere Felder wie den Hersteller haben möchte. Wenn ich nur den gesamten USB_DEVICE_DESCRIPTOR erhalten könnte, hätte ich wahrscheinlich alles, was ich brauche. LibUsb.Net unterstützt anscheinend nur WinUsb-Geräte. So scheint es den Deskriptor zu bekommen. Anscheinend hat WinRT einige neue APIs und daher haben Windows Store-Apps eine gute Möglichkeit, den Deskriptor zu erhalten. Dies ist jedoch definitiv keine Windows Store-App, und ich weiß nicht, ob es eine andere Möglichkeit gibt, die neueren APIs zu verwenden.

Kann mich jemand in die richtige Richtung weisen? Ist es einfach nicht möglich, diese Informationen auf nette Weise von der WinAPI abzurufen, ohne am Hub zu beginnen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage