![]() |
QueryDosDevice = Path ist ungültig?
Hallo,
ich kämpfe mal wieder mit WinAPI;-) Delphi 7 Folgendes ist gegeben:
Delphi-Quellcode:
Es geht bist auf die Tatsache, das QueryDosDevice immer den Fehler zurück gibt:
...
type TVolumeRec = record DeviceStr : String; VolumeStr : String; PathStr : String; end; ... procedure SplitVolumeNames(aVolume : Array of Char; var aVolumeRec : TVolumeRec); var BufferLength, ReturnLength : DWORD; VolumePathNames : PChar; begin BufferLength := MAX_PATH + 1; aVolumeRec.VolumeStr := Copy(aVolume, 1, BufferLength); VolumePathNames := StrAlloc(BufferLength); if GetVolumePathNamesForVolumeName(PChar(aVolumeRec.VolumeStr), VolumePathNames, BufferLength, ReturnLength) then aVolumeRec.PathStr := StrPas(VolumePathNames); StrDispose(VolumePathNames); VolumePathNames := StrAlloc(BufferLength); if (QueryDosDevice(PChar(aVolumeRec.VolumeStr), VolumePathNames, BufferLength) > 0) then aVolumeRec.DeviceStr := VolumePathNames else ErrorDesc(GetLastError); StrDispose(VolumePathNames); end; function GetVolumes(var aVolumeRecList : TVolumeRecList) : Boolean; var hVolume : THandle; nVolume : Array[0..MAX_PATH] of Char; I : Integer; begin I := 0; hVolume := FindFirstVolume(nVolume, SizeOf(nVolume)); if hVolume <> INVALID_HANDLE_VALUE then repeat SplitVolumeNames(nVolume, aVolumeRecList[I]); Inc(I); until not FindNextVolume(hVolume, nVolume, SizeOf(nVolume)); FindVolumeClose(hVolume); SetLength(aVolumeRecList, I); Result := Length(aVolumeRecList) > 0; end; Zitat:
korrekten Wert: 'E:\'. Hat jemand einen Tipp? Ach so, über gebe ich bei GetVolumePathNamesForVolumeName das Ziel so:
Delphi-Quellcode:
Kommt es zu einer ZV.
var
VolumePathNames : String; begin if GetVolumePathNamesForVolumeName(PChar(aVolumeRec.VolumeStr), @VolumePathNames[1], BufferLength, ReturnLength) then aVolumeRec.PathStr := VolumePathNames; Danke |
AW: QueryDosDevice = Path ist ungültig?
Zitat:
Probier mal:
Delphi-Quellcode:
var
buffer: array[0...4096] of char; begin ... GetVolumePathNamesForVolumeName(PChar(aVolumeRec.VolumeStr), @buffer, SizeOf(buffer) div SizeOf(char), ReturnLength) |
AW: QueryDosDevice = Path ist ungültig?
Hallo Bernhard,
werde ich versuchen, das Problemkind ist jedoch QueryDosDevices. Danke |
AW: QueryDosDevice = Path ist ungültig?
Dumm nur das obiger Quellcode kein QueryDosDevices beinhaltet:gruebel:
|
AW: QueryDosDevice = Path ist ungültig?
nicht?
Code:
if (QueryDosDevice(PChar(aVolumeRec.VolumeStr), VolumePathNames, BufferLength) > 0) then
|
AW: QueryDosDevice = Path ist ungültig?
Zitat:
Und das habe ich mittels suche nicht gefuenden :-( |
AW: QueryDosDevice = Path ist ungültig?
Okay ein s ist schuld:wink:
Ich habe den Code mal ein wenig geändert. Was mich verwirrt ist die Tatsache das mit einem Laufwerksbuchstaben geht und mit einer GUID nicht:?:
Delphi-Quellcode:
aVolumeRec.PathStr = 'E:\' liefert das richtige Ergebnis: '\Device\HarddiskVolume1'.
procedure SplitVolumeNames(aVolume : Array of Char; var aVolumeRec : TVolumeRec);
var BufferLength, ReturnLength : DWORD; VolumePathNames : TCharArray; begin BufferLength := MAX_PATH + 1; aVolumeRec.VolumeStr := Copy(aVolume, 1, BufferLength); FillChar(VolumePathNames, SizeOf(TCharArray), #0); if GetVolumePathNamesForVolumeName(aVolume, VolumePathNames, BufferLength, ReturnLength) then aVolumeRec.PathStr := StrPas(VolumePathNames); FillChar(VolumePathNames, SizeOf(TCharArray), #0); if (QueryDosDevice(PChar(Copy(aVolumeRec.PathStr, 1, 2)), VolumePathNames, BufferLength) > 0) then aVolumeRec.DeviceStr := VolumePathNames else ErrorDesc(GetLastError); end; Übergebe ich jedoch die passende GIUD: '\\?\Volume{5bc8c923-ba57-11de-b195-005056c00008}\'; Kommt die Fehlermeldung: Der angegebene Pfadname ist ungültig. Kann mir einer sagen warum das so ist, habe ich etwas übersehen? Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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