Finden Sie, welches Laufwerk in WinXP, an die USB-Massenspeichergerät entspricht
-
06-09-2019 - |
Frage
ich mehrere USB-Laufwerke angeschlossen an einen Computer WinXP SP3, und ich brauche, sie auseinanderzuhalten programmatisch - Ich brauche die Laufwerksbuchstaben finden entspricht, welches Gerät (in diesem Fall ein Gerät ~ ein Band). Ich kann ihre Volume IDs und Laufwerksbuchstaben mit mountvol
bekommen, so etwas wie folgt aussehen:
C:\WINDOWS\> mountvol
\\?\Volume{bdb681b2-1ddf-11dd-bf71-806d6172696f}\
C:\
\\?\Volume{6a8784f8-7406-11dd-a8c3-001e8c829b67}\
A:\
Auch mit devcon oder den Geräte-Manager, kann ich die Geräte-IDs finden Sie unter:
C:\WINDOWS\> devcon resources *STOR*
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
Name: Generic volume
STORAGE\VOLUME\1&30A96598&0&SIGNATURED84ED84EOFFSET7E00LENGTH2543150400
Name: Generic volume
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER2.0&REV_1.00\0803240752536&0
Name: Kingston DataTraveler2.0 USB Device
Allerdings habe ich nicht einen Weg gefunden, die Geräte-ID und den Volume-ID / Brief, wie der „Hardware sicher entfernen“ Dialog zu verknüpfen hat (daher gehe ich davon aus, es ist möglich):
(Quelle: piskvor.org )
Wie Sie sehen können, werden diese die gleichen Geräte, die ich in devcon und das gleiche Volumen sehen, dass mountvol sieht; aber bisher habe ich noch nicht die Verbindung zwischen ihnen gefunden.
Ich habe einige Zusammenhang questions , aber die scheinen den Ansatz zu verwenden „, was auch immer Sie finden erste ist Ihr USB-Gerät“, die nicht sehr nützlich in meinem Fall ist, da es mehrere ähnlichen Geräte (gleiche Hersteller, oft gleicher Produkttyp) sein wird, verbunden ist.
Edit:
@ MSalters ‘Antwort sieht vielversprechend aus: Auf XP, HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
REG_BINARY
Werte \DosDevices\x:
hat (wo x
ist [AZ]); der Kommentar (UTF-16) Name der richtigen Gerät (z
\DosDevices\A:
= „\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\"
, die größte entspricht
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
oben in der Geräteliste zu sehen ist).
Wird sehen, ob das ist der Weg zu gehen.
Lösung
Es ist eine nicht-triviale Frage. Es gibt keine offizielle API für sie, soweit ich das beurteilen kann. So müssen Sie eine nicht dokumentierte API: die Registrierung. HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
enthält Einträge für beide Laufwerksbuchstaben und Volume IDs. Wenn man sich die tatsächlichen Daten anschauen, werden Sie feststellen, dass es das Laufwerk identifiziert. Schauen Sie sich die binären Daten als Unicode-String. Es wird darauf Sie HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ENUM\
. Allerdings unterscheiden sich XP und Vista in genau das, was Subkeys dort Bezug genommen wird, und wie. (Vista ist einfacher, so versuchen, dass zuerst).
Andere Tipps
Es gibt eine offizielle API, dies zu tun. Sehen Sie dieses Beispiel: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx
Das Prinzip ist, dass jedes Speichervolumen unter Windows eine globale Nummer zugeordnet ist. Zuerst fragen Sie Ihren Antrieb für seine Nummer (durch Öffnen „\ X:“ und eine IOCTL_STORAGE_GET_DEVICE_NUMBER
Anfrage senden). Zweitens Sie alle Plattengeräte gehen und fragen, jeder für seine Nummer (durch Öffnen durch einen anderen Weg, so dass Sie nicht nur String-Vergleich).
Wenn Sie eine Plattengerät tragen die gleiche Nummer finden, wie Sie Ihr Laufwerk abgefragt, Sie wissen, Sie haben einen Gewinner.