Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi VolumeMountPoints (https://www.delphipraxis.net/87754-volumemountpoints.html)

Neutral General 8. Mär 2007 15:35

Re: VolumeMountPoints
 
Zitat:

Zitat von himitsu
MSDN-Library durchsuchenQueryDosDevice ... nimm das doch endlich mal :!:
Damit kannst du sowas machen, wie auch mit dem "DOS-Befehl" SUBST :zwinker:

Vielleicht stell ich mich ja blöd an aber jetzt hab ich QueryDosDevice ausgeführt und zurück bekomme ich sowas wie

Zitat:

\Device\HarddiskVolume8
Und was mach ich jetzt damit ? :X

Gruß
Neutral General

himitsu 10. Mär 2007 18:43

Re: VolumeMountPoints
 
Upss ja, ich meinte eigentlich MSDN-Library durchsuchenDefineDosDevice ... auf welches übrigens bei MSDN-Library durchsuchenQueryDosDevice verlinkt wird. :zwinker:

C:\Programme\ als L:\ "mounten":
Delphi-Quellcode:
// verbinden
DefineDosDevice(DDD_RAW_TARGET_PATH, 'L:', '\??\C:\Programme');

// trennen
DefineDosDevice(DDD_REMOVE_DEFINITION, 'L:', nil);

kannt es ja mal bei Olli testen :angel:
hier 'ne nette BatchFile (test.bat):
Code:
subst4nt.exe L: C:\Programme
pause
subst4nt.exe L: -r
pause

Neutral General 11. Mär 2007 12:04

Re: VolumeMountPoints
 
Hi,

Delphi-Quellcode:
// verbinden
DefineDosDevice(DDD_RAW_TARGET_PATH, 'L:', '\??\C:\Programme');

// trennen
DefineDosDevice(DDD_REMOVE_DEFINITION, 'L:', nil);
... Das einzige was mir immer gefehlt hat war '\??\' vor dem eigentlichen Pfad... Ich hab mich auch tot-gegoogelt und NIRGENDWO stand das so :roll:

Aber danke :)

Gruß
Neutral General

himitsu 11. Mär 2007 15:12

Re: VolumeMountPoints
 
keine Sorge ... diese Variante kannte ich vor Olli's Tool auch noch nicht ... halt nur die UNC-Varianten ( \\.\ und \\?\ ) ^^

und im MSDN/PSDK is mir sowas demnach auch noch nicht untergekommen :shock:

davtix 28. Apr 2014 16:15

AW: VolumeMountPoints
 
Zitat:

Zitat von Neutral General (Beitrag 596726)
Hi,

Ich verzweifel noch. Kann mir jemand eindeutig erklären wie ich MSDN-Library durchsuchenSetVolumeMountPoint aufrufe?
Bei MSDN steht zwar ein Beispiel aber sonst stehts im Internet immer anders. Klappen tut beides nicht.

Delphi-Quellcode:
SetVolumeMountPoint('W:\','\C:\Test\') // oder
SetVolumeMountPoint('\C:\Test\','W:\')
GetLastError:

Zitat:

Falscher Parameter.
Delphi-Quellcode:
SetVolumeMountPoint('W:\','\C:\Test') // oder
SetVolumeMountPoint('\C:\Test','W:\')
GetLastError:

Zitat:

Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

Delphi-Quellcode:
GetVolumeNameForVolumeMountPoint(PChar('C:\\'),@Buffer[0],SizeOf(Buffer));
SetVolumeMountPoint('\C:\Test\',Buffer)
Delphi-Quellcode:
GetVolumeNameForVolumeMountPoint(PChar('C:\\'),@Buffer[0],SizeOf(Buffer));
SetVolumeMountPoint(Buffer,'\C:\Test\')
GetLastError:

Zitat:

Das Verzeichnis ist nicht leer.
Und wie das leer ist! -.-

In Buffer steht immer sowas (oder so ähnlich halt):

Delphi-Quellcode:
\\?\Volume{dafc6733-ff88-11d9-b411-806d6172696f}\
Was is da jetzt noch falsch dran ?-.-

Gruß
Neutral General


hi Neutral General ,
hast du nu rausgefunden wie du die GUID herrausbekommst???

bei mir kommt immer ne fehlermeldung der ntdll.dll.

Delphi-Quellcode:
  Function GetVolumeNameForVolumeMountPoint(
             lpszVolumeMountPoint: PAnsiChar;
             lpszVolumeName: PAnsiChar;
             cchBufferLength: DWORD): Boolean;
             stdcall;
             external 'C:\Windows\SysWOW64\kernel32.dll' name 'GetVolumeNameForVolumeMountPointA';
Delphi-Quellcode:
procedure TForm1.Button21Click(Sender: TObject);
var
  vmp : PAnsiChar;
  vn : PAnsiChar;
  i : cardinal;

begin
  vmp := ('D:\\');
  //GetVolumeNameForVolumeMountPoint(vmp, vn, i);

  GetVolumeNameForVolumeMountPoint(vmp,vn, i);

//  GetVolumeNameForVolumeMountPoint(PChar('C:\\'),@Buffer[0],SizeOf(Buffer));

 ListBox2.Items.Add( string( vn));
end;

Neutral General 28. Apr 2014 16:28

AW: VolumeMountPoints
 
Hallo,

Habs grad ausprobiert und bei mir gehts so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Buffer: Array[0..100] of AnsiChar; // Je nachdem wie viel du willst/kannst/sollst
begin
  GetVolumeNameForVolumeMountPoint('D:\\',@Buffer[0], Length(Buffer));
  Caption := Buffer; // \\?\Volume{6f55826c-bfa1-11e1-86d0-20cf30e33243}\
end;
Der Fehler war, dass du für den Volume name Speicher bereitstellen musst. Bei mir sind es die 101 Bytes/AnsiChars des "Buffer"-Arrays. Im 3. Parameter musst du die länge des Buffers übergeben den du bereitstellst. Da hast du einfach das uninitialisierte "i" übergeben in der irgendeine beliebige Zahl drin stehen kann.
Daher hat Windows versucht in nicht angeforderten Speicher zu schreiben, was mit einer Exception geendet hat.

davtix 28. Apr 2014 16:36

AW: VolumeMountPoints
 
ein RIESIGEN DANK AN DICH... endlich , hab seit 5 tagen probiert und gelesen.
:thumb::thumb::thumb::thumb::thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Seite 2 von 2     12   

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