Finden Sie, auf welchem Laufwerk entspricht, die USB-Massenspeicher-Gerät in WinXP
Ich habe mehrere USB-Laufwerke angeschlossen sind, um ein WinXP SP3 Rechner, und ich muss sagen, Sie auseinander, programmatisch - ich brauche, um herauszufinden, welche Laufwerksbuchstaben entspricht, welches Gerät (in diesem Fall ein Gerät ~ ein volume). Ich kann die Volume-IDs und Laufwerksbuchstaben mit mountvol
, suchen so etwas wie dieses:
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 sehen, die device-IDs:
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 noch keinen Weg gefunden den link der Geräte-ID und volume-ID/Brief, wie die "hardware Sicher entfernen" - dialog funktioniert (daher nehme ich an, es ist möglich):
(Quelle: piskvor.org)
Wie Sie sehen können, das sind die gleichen Geräte, die ich sehe, in devcon und dem gleichen volume, die mountvol sieht, aber bisher habe ich noch nicht gefunden, die Verbindung zwischen Ihnen.
Ich habe festgestellt, dass einige Verwandte Fragen, aber diejenigen, die scheinen zu verwenden, der Ansatz "finden, was Sie zuerst Ihr USB-Gerät" nicht sehr hilfreich in meinem Fall, da gibt es mehrere ähnliche Geräte (gleichen Hersteller, oft gleiche Produkt-Typ) angeschlossen.
Edit:
@MSalters' Antwort sieht vielversprechend aus: Auf XP HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
hat REG_BINARY
Werte \DosDevices\x:
(wo x
ist [A-Z]); der Kommentar ist (UTF-16) name des richtigen Gerätes (z.B.
\DosDevices\A:
= "\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\"
entspricht
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
oben gesehen in der Geräte-Liste).
Werden sehen, ob das ist der Weg zu gehen.
- Hast du jemals einen Weg finden, dies zu tun? Ich bin auch versucht zu bestimmen, das bereitgestellte Volumen für ein USB-mass-storage-device. Danke.
- Nutt: Nein, nicht wirklich; es war zu kompliziert - die haben zu viel Zeit zu Graben, in die es, im Vergleich zu die Allgemeine Aufgabe; mit undokumentierten APIs können Sie bekommen zu chaotisch. (Darüber hinaus, Veränderungen in der gesamten Aufgabe haben, diskutiert die Notwendigkeit für diese, für mich)
- Nutt: ich habe Zwar aufgegeben, diesen Aufwand in Windows, ich habe nun einen Weg gefunden, um dies in Linux, wenn du interessiert bist: stackoverflow.com/questions/3881449/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine nicht-triviale Frage. Es gibt keine offizielle API für die es, soweit ich das sagen kann. So müssen Sie eine undokumentierte API: die registry.
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
enthält Einträge für beide Laufwerksbuchstaben und volume-IDs. Wenn Sie die aktuellen Daten betrachtet, werden Sie feststellen, dass es erkennt das Laufwerk. Blick auf die Binär-Daten als Unicode-string. Es wird IhnenHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ENUM\
. Aber, XP und Vista unterscheiden sich in genau das, was Unterschlüssel verwiesen wird, gibt es, und wie. (Vista ist einfacher, so versuchen Sie, die erste).Gibt es eine offizielle API, dies zu tun. Siehe dieses Beispiel:
http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx
Das Prinzip ist, dass jeder Datenträger unter Windows zugeordnet ist, eine Globale Zahl. Erstens, Fragen Sie Ihren Antrieb für seine Anzahl (öffnung des "\X:" und senden eine
IOCTL_STORAGE_GET_DEVICE_NUMBER
Anfrage). Zweitens, Sie gehen über alle disk-Geräte und bitten jeden einzelnen für seine Reihe (durch die öffnung, durch die einem anderen Pfad, so können Sie nicht nur string-Vergleiche).Sobald Sie das Laufwerk mit den gleichen Anzahl, wie Sie abgefragt, Ihr Fahrt, Sie wissen, Sie haben einen Gewinner.