Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#6

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 27. Jul 2007, 06:11
Wie steht's mit session-lokalen Gerätenamen (und Laufwerksbuchstaben)?

Zitat von Gerd01:
Zitat von Robert Marquardt:
Gibt es das /device/cdrom0 ueberhaupt?
Ja sicher es gibt auch /device/cdrom1 und weitere wenn du mehrere CD_laufwerke hast.
Soso und in welchem Namensraum ist das? Sieht ein bißchen linuxig aus, ist aber nicht Cygwin oder SFU. Robert's Frage hat hier durchaus ihre Berechtigung und Reinhard hat den korrekten Weg aufgezeigt. Von Win32 aus kannst du ohnehin nur implizit über DefineDosDevice() mit dem Flag DDD_RAW_TARGET_PATH auf das Objektverzeichnis \Device zugreifen. Ich vermute mal, daß es das ist was du meinst. Sonst bleibt für dich nur auf \??\CdRomX (was üblicherweise automatisch vom System angelegt wird und auf das entsprechende \Device\CdRomX zeigt) zuzugreifen.

Ansonsten ist das Anliegen an sich schon ... nunja ... fragwürdig, weil nämlich der Gerätename (\Device\*) immer eindeutig ist, ein Laufwerksbuchstabe hingegen nicht. Bei einem System mit 2 Festplatten und einem CD-ROM-Laufwerk kann ich bspw. auch, nachdem C: und D: für die Partitionen vergeben sind, die Laufwerksbuchstaben E: bis Z: für das (gleiche!) CD-ROM-Laufwerk vergeben. Mag zwar seltsam klingen, ist aber gut und gern möglich und vor allem vollkommmen legitim!

Die Funktion GetDosDevice() wie oben dargestellt wird übrigens schon auf einem "normalen" System (wo man ein 1:1-Mapping hat) nicht immer funktionieren, weil man nämlich auch dort die Buchstaben in einer anderen Reihenfolge als in welcher die Geräte logisch beim "Gerätemanager" angemeldet wurden auf Laufwerksbuchstaben mappen kann. Laufwerk R: kann gut und gerne auf \Device\CdRom3 verweisen, während U: bis W: auf \Device\CdRom0 bis \Device\CdRom2 verweisen. Was dann? Die o.g. Funktion GetDosDevice() baut dann mal eben Mist. Abgesehen davon kann man bestimmte CD-Laufwerke auch entfernen, so daß CdRom0 nicht immer das erste gültige Gerät in einem laufenden System sein muß.

Ich würde dringend empfehlen mal WinObj von Sysinternals runterzuladen und dort mal ein wenig durch den Namensraum des NT-Objektmanagers browsen, damit du ein Gefühl dafür bekommst was eigentlich so unter der Haube los ist.
  Mit Zitat antworten Zitat