![]() |
Alle MountPoints auslesen
Hallo Zusammen,
ich stehe vor einen Problem zum Thema "Mounten von Datenträgern", für das ich keine Lösung gefunden habe. Ich habe viele Tipps gefunden, wie ich den MountPoint "\\?\\Volume{..." für ein vorhandenes Laufwerk ermitteln kann. Was ich benötige, ist eine Routine, die mir alle Datenträger ausliest. Auch die, die keinen Laufwerksbuchstaben haben oder mit einem Verzeichnis gemountet sind. Z.B. den USB-Stick, der keinen Buchstaben zugewiesen bekam, weil dieser schon belegt war. Ich benötige die interne Bezeichnungen "\\?\\Volume{...", damit ich diese Laufwerke ggf. durch mein Programm mounten kann. Kann mir hierzu einer helfen? Gruß aus Köln Thomas |
Re: Alle MountPoints auslesen
Use
![]() ![]() See also ![]() ![]() |
Re: Alle MountPoints auslesen
Hello Remko,
thanks for the informations. It works fine:
Delphi-Quellcode:
Do you know a function like GetDriveType, whitch I could use for unmounted volumes?
procedure GetVolumes(Vol:TStrings);
var Res : integer; Buf : array [0..MAX_PATH] of Char; begin Vol.Clear; Res := FindFirstVolume(Buf,SizeOf(Buf)); repeat Vol.Add(StrPas(Buf)); until (not FindNextVolume(Res,Buf,SizeOf(Buf))); FindVolumeClose(Res); end; Gruß aus Köln Thomas |
Re: Alle MountPoints auslesen
You should check for errors...
Delphi-Quellcode:
As far as I recall GetDriveType should return the type for non mounted volumes as well, does my ChDrvLetter program show it? If so then GetDriveType works ;-)
hVolume := FindFirstVolumeW(VolumeName, CharCount);
if hVolume = INVALID_HANDLE_VALUE then ... (if you run ChrDrvLetter without parameters it will just dump all volumes, this is the example output on my pc:)
Delphi-Quellcode:
c:\Users\rweijnen\Documents\Delphi\OldProjects\ChDrvLetter>ChDrvLetter.exe
ChDrvLetter v1.4 (c) Copyright 2008 by Remko Weijnen ([url]www.remkoweijnen.nl[/url]) Assigned Letters: [CDY] Volume 0 Letter: C:\ Label : SEVEN Device: \Device\HarddiskVolume1 Name : \\?\Volume{445041c9-9f61-11de-87fd-806e6f6e6963}\ Type : DRIVE_FIXED Volume 1 Letter: D:\ Label : MFD2_UNLOCK Device: \Device\CdRom0 Name : \\?\Volume{445041cd-9f61-11de-87fd-806e6f6e6963}\ Type : DRIVE_CDROM Volume 2 Letter: Y:\ Label : dvd2_eur_2010_vx v7 Device: \Device\CdRom1 Name : \\?\Volume{f097e2b2-9fcc-11de-8c17-001e3799c3f7}\ Type : DRIVE_CDROM |
AW: Re: Alle MountPoints auslesen
Hallo zusammen,
ich muß diesen Thread mal wieder an's Licht holen. Diese Procedure läuft unter Delphi 2007 fehlerfrei
Delphi-Quellcode:
Seit einigen Wochen nutze ich jetzt Delphi XE4. Und hier kommt es beim Befehl FindNextVolume zu einem Kernel32 Fehler.
procedure GetVolumes(Vol:TStrings);
var Res : integer; Buf : array [0..MAX_PATH] of Char; begin Vol.Clear; Res := FindFirstVolume(Buf,SizeOf(Buf)); repeat Vol.Add(StrPas(Buf)); until (not FindNextVolume(Res,Buf,SizeOf(Buf))); FindVolumeClose(Res); end; Hat jemand 'ne Idee und noch besser: 'ne Lösung? Gruß aus Köln Thomas |
AW: Alle MountPoints auslesen
Delphi-Quellcode:
?
SizeOf(Buf)
Überleg mal, was man da als zweiten/dritten Parameter übergeben soll. :zwinker:
Delphi-Quellcode:
Length(Buf)
Tja, hätte man mal gleich die Dokumentation richtig gelesen. :angle: Wobei die Fehlerbehandlung nun auch nicht sonderlich ideal ist. [add]
Delphi-Quellcode:
procedure GetVolumes(Vol:TStrings);
var Res : THandle; Buf : array [0..MAX_PATH] of Char; begin Vol.Clear; Res := FindFirstVolume(Buf, Length(Buf)); if Res = INVALID_HANDLE_VALUE then RaiseLastOSError; repeat Vol.Add(StrPas(Buf)); until not FindNextVolume(Res, Buf, Length(Buf)); FindVolumeClose(Res); end; |
AW: Alle MountPoints auslesen
Also strengnenommen, himitsu, ist das ja auch nicht ganz korrekt =P
Wenn, dann~ Length() * SizeOf().. |
AW: Alle MountPoints auslesen
Neeee.
Delphi-Quellcode:
oder
Length(x) * SizeOf(Char)
Delphi-Quellcode:
wäre nur richtig, wenn man dort die Länge in Bytes angeben soll.
SizeOf(StaticCharArray)
Delphi-Quellcode:
ist dafür, wenn man die Länge in Zeichen anzugeben hat. :zwinker:
Length(x)
|
AW: Alle MountPoints auslesen
Kann mir jemand sagen, welche Unit ich der Uses hinzufügen muss, damit XE4 FindFistVolume, FindNextVolume und FindVolumeClose findet? Hab schon mit Grep das ganze Emba-Verzeichnis durchsucht, aber keinen Treffer erhalten.
|
AW: Alle MountPoints auslesen
Mein Delphi7 hier kannte es auch nicht (was nichts heißen muss).
Notfalls halt einfach grad die Funktion von MSDN abtippen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz