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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top