AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alle MountPoints auslesen

Ein Thema von ThoPos · begonnen am 24. Mär 2010 · letzter Beitrag vom 6. Okt 2015
Antwort Antwort
Seite 1 von 2  1 2      
ThoPos

Registriert seit: 30. Jun 2004
Ort: Köln
69 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Alle MountPoints auslesen

  Alt 24. Mär 2010, 19:29
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
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#2

Re: Alle MountPoints auslesen

  Alt 25. Mär 2010, 17:42
Use FindFirstVolume then step through all available volumes with FindNextVolume.

See also http://www.remkoweijnen.nl/blog/2008...a-device-name/ and http://www.remkoweijnen.nl/blog/2008...er-assignment/
See my blog blog
See our Jedi blog
  Mit Zitat antworten Zitat
ThoPos

Registriert seit: 30. Jun 2004
Ort: Köln
69 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Alle MountPoints auslesen

  Alt 25. Mär 2010, 18:36
Hello Remko,

thanks for the informations. It works fine:

Delphi-Quellcode:
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;
Do you know a function like GetDriveType, whitch I could use for unmounted volumes?

Gruß aus Köln
Thomas
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Remko
Remko

Registriert seit: 10. Okt 2006
Ort: 's-Hertogenbosch, Die Niederlande
222 Beiträge
 
RAD-Studio 2010 Arc
 
#4

Re: Alle MountPoints auslesen

  Alt 25. Mär 2010, 21:03
You should check for errors...
Delphi-Quellcode:
  hVolume := FindFirstVolumeW(VolumeName, CharCount);

  if hVolume = INVALID_HANDLE_VALUE then
...
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

(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
See my blog blog
See our Jedi blog
  Mit Zitat antworten Zitat
ThoPos

Registriert seit: 30. Jun 2004
Ort: Köln
69 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Re: Alle MountPoints auslesen

  Alt 12. Mär 2014, 13:23
Hallo zusammen,

ich muß diesen Thread mal wieder an's Licht holen.


Diese Procedure läuft unter Delphi 2007 fehlerfrei

Delphi-Quellcode:
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;
Seit einigen Wochen nutze ich jetzt Delphi XE4. Und hier kommt es beim Befehl FindNextVolume zu einem Kernel32 Fehler.
Hat jemand 'ne Idee und noch besser: 'ne Lösung?


Gruß aus Köln
Thomas
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Alle MountPoints auslesen

  Alt 12. Mär 2014, 13:29
SizeOf(Buf) ?

Überleg mal, was man da als zweiten/dritten Parameter übergeben soll.



Length(Buf)

Tja, hätte man mal gleich die Dokumentation richtig gelesen.

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;
$2B or not $2B

Geändert von himitsu (12. Mär 2014 um 13:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Alle MountPoints auslesen

  Alt 12. Mär 2014, 15:38
Also strengnenommen, himitsu, ist das ja auch nicht ganz korrekt =P
Wenn, dann~
Length() * SizeOf()..
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Alle MountPoints auslesen

  Alt 12. Mär 2014, 17:34
Neeee.

Length(x) * SizeOf(Char) oder SizeOf(StaticCharArray) wäre nur richtig, wenn man dort die Länge in Bytes angeben soll.

Length(x) ist dafür, wenn man die Länge in Zeichen anzugeben hat.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#9

AW: Alle MountPoints auslesen

  Alt 6. Okt 2015, 08:10
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.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Alle MountPoints auslesen

  Alt 6. Okt 2015, 08:39
Mein Delphi7 hier kannte es auch nicht (was nichts heißen muss).
Notfalls halt einfach grad die Funktion von MSDN abtippen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz