GetVolumePathNamesForVolumeName unter WIN2K



  • Hallo!

    Bin neu hier und hoffe mal mir wird geholfen: hab mir ein kleines Programm geschrieben welches physikalische Laufwerke welche den gleichen Buchstaben verwenden wie ein Netzlaufwerk (das kommt vor wenn man im Wechsellaufwerke ansteckt) automatisch auf einen wirklich freien Laufwerksbuchstaben umlegt.

    Dazu suche ich mir mit FindFirstVolume (bzw. FindNextVolume) den VolumeNamen (z.B. *\?\Volume{4c916f46-be22-11d7-bf8e-000c6e39e0bf}* ) und hole mir dann mit GetVolumePathNamesForVolumeName die entsprechend zugeordneten Volume-Mountpoints (**C:\, D:**, ...).
    Nur leider hat GetVolumePathNamesForVolumeName einen Haken: geht nur unter WINXP & WIN2K3-Server.
    Wie kann ich mir unter WIN2K die Information besorgen welche Buchstaben zu welchem Volumenamen gehören?

    Leider brauche ich beide Informationen, da ich für DeleteVolumeMountPoint & GetDriveType den Buchstaben (**C:**) brauche (um das falsch zugeordnete Volume von seinem Buchstaben zu befreien), für SetVolumeMountPoint jedoch den VolumeNamen benötige.

    Hoffe mal es hat einer eine Idee 🙂 Hab das mit der WinAPI bisher ganz toll gefunden, nur dieses Problem hier bremst meinen Tatendrang ein bisserl 😃

    mfg, Roland



  • GetVolumeNameForVolumeMountPoint 😉 - oder habe ich dich falsch verstanden 🙄



  • GetVolumeNameForVolumeMountPoint macht leider ein bisserl was anderes, der erwartet bereits einen Laufwerksbuchstaben als Eingabe und liefert mir dann die darunterliegenden MountPoints zurück.
    Wenn ich z.B. als IN "W:\" verwende erhalte ich in meinem Fall "W:\ZIP" zurück, da ich mein ZIP Drive an den MountPoint W:\ZIP gehängt hab.

    Ich bräuchte eine Funktion die sozusagen auch den VolumeNamen (das \?\.... Ding) als Eingabe nimmt und mir die zugehörigen MountPoints und VolumePathNames liefert.

    Der einzige Workaround der mir eingefallen ist der Systemaufruf von "mountvol > mountvol.txt" danach eine Suche nach meinem Volumenamen in dem Textfile und dem Wissen, daß in der Zeile danach der zugehörige Laufwerksbuchstabe steht...

    Wenn jemand eine bessere Idee hat immer heraus damit!

    Danke, Roland

    PS: Gibts ne Möglichkeit herauszufinden wie mountvol diese Info kriegt? Welche Systemaufrufe es durchführt?



  • Ähm, das verstehe ich jetzt nicht! In der Doku steht nämlich:

    Pointer to a string that receives the volume name. This name is a unique volume name of the form "\?\Volume{GUID}\" where GUID is the GUID that identifies the volume.
    [...]
    Use GetVolumeNameForVolumeMountPoint to obtain unique volume names for use with other functions that work with volume mount points and volume mounting.



  • Stimmt... mein Irrtum. War ein bisserl fixiert darauf mit FindFirstVolume und FindNextVolume alle VolumeNames herauszufinden und damit etwas anzufangen, mit GetVolumeNameForVolumeMountPoint brauch ich die halt nicht mehr und geh stattdessen jetzt einfach von A-Z alle Buchstaben durch:)

    Herzlichen Dank für den Tip! Bin da irgendwie voll auf der Leitung gestanden, sorry.

    mfg, Roland

    PS: wenn ich auf http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/volume_management_functions.asp geh und einen sync toc mach land ich bei WebDevelopment??? Tritt bei mir mit mehreren verschiedenen Browsern auf verschiedenen Computern auf. Irgendeine Idee warum? Fehler von MS?



  • Sodala, hab mein Winzlingsprogramm jetzt nochmal kräftig umgestrickt und bin dabei noch auf 2 Sachen draufgekommen:

    1. GetVolumeNameForVolumeMountPoint kann man leider doch nicht für meine Aufgabenstellung verwenden da es keinen VolumeName liefert wenn ein Netzlaufwerk den gleichen Laufwerksbuchstaben verwenden (und genau das will ich ja erkennen: wenn VolumeName vorhanden und DriveType=Network Drive dann muß der Laufwerksbuchstabe umgelegt werden.)
      Also ist mal nicht damit.

    2. Hab ich festgestellt daß es in WIN2K gar nicht möglich ist einem Volume den Buchstaben eines Netzlaufwerkes zu geben, da diese in der Datenträgerverwaltung gar nicht zur Verfügung stehen (sind sozusagen schon vergeben). In WINXP ist es eben möglich das zu tun, woraus sich mein ursprüngliches Problem ergeben hat.

    Summa summarum rennt mein Programm mit GetVolumePathNamesForVolumeName zwar nicht unter WIN2K, braucht es aber auch nicht weil das Problem dort gar nicht existiert:)

    Trotzdem Danke für die Hilfe!

    mfg, Roland



  • Das erklärt auch, warum es die Funktion unter W2k nicht gibt 😃
    Das mit dem sync toc war bei mir gestern auch so, heute läuft es wieder -> Problem von Microsoft


Anmelden zum Antworten