Ich möchte einen Eject-Befehl an ein bestimmtes USB-Gerät senden, das durch seine VID und PID identifiziert wurde. Ich kann das Gerät finden, indem ich SetupDiEnumDeviceInfo () und SetupDiGetDeviceRegistryProperty () benutze und die VID / PID-Nummern in der HARDWAREID-Zeichenfolge abgleiche, aber das ist soweit ich weiß.
Ich habe eine SP_DEVINFO_DATA-Struktur und ein HDEVINFO-Handle. Wie würde ich diese mit einem Laufwerksbuchstaben oder einem Volume-Pfad in Beziehung setzen, damit ich einen Eject-Befehl senden kann?
Nun, ich habe es herausgefunden. Der CodeProject-Artikel, der mit Lukas verlinkt ist, zeigt, wie man den Laufwerksbuchstaben an eine Geräteschnittstelle anpasst, die halb so groß ist, also gebe ich diese Antwort +1, löst aber nicht das ganze Problem.
Ich musste herausfinden, wie ich die Geräteinstanz für mein USB-Gerät finden und einen Weg finden kann, dies der Geräteschnittstelle anzupassen. Die Funktionen CM_Locate_DevNode () und CM_Get_Child () waren der Schlüssel dazu. Schließlich kann ich eine IOCTL verwenden, um das Gerät auszustoßen.
Das Gerät, mit dem ich es zu tun habe, ist ein USB-CD-ROM-Laufwerk, weshalb ich den Gerätetyp fest auf CD-ROM codiert habe. Ich kann nicht glauben, wie viel Code benötigt wird, um das zu tun, was ich für eine ziemlich einfache Aufgabe hielt (ich habe meinen Kunden 2 Stunden lang zitiert, um diesen Code zu schreiben, es hat mich vier Tage gekostet, alles herauszufinden!). Hier ist der letzte Arbeitscode, der hoffentlich einen von euch da draußen davon abhalten wird, durch die Hölle zu gehen, die ich gerade habe:
%Vor%