| |
|
|
maroro | Ich habe ein Programm geschieben das verschlüsselte Festplatten managt. Die Verschlüsselung selbst erledigt Truecrypt. bei verschlüsselten Festplatten braucht man den Volume Name z.B. \\?\Volume\{2eca078d-5cbc-43d3-aff8-7e8511f60d0e}\ den man mit dem Programm Mountvol [...] auslesen kann. Momentan nutze ich das auch in dem ich Mountvol eine Datei erzeugen lasse die ich dann mit XProfan auslese. da das jedesmal eine Festplattenaktivität erzeugt habe ich ein niedriges Aktualisierungsinterval gewählt. Ich möchte aber öfter aktualisieren weshalb ich nach einer Möglichkeit suche diese Volume Name mit Xprofan auszulesen. Alle Recherchen waren bislang aber erfolglos. Hat jemand eine Idee wie man da ran kommt? |
|
|
| |
|
|
|
H.Brill | Google ist dein Freund Volume + GUID eingegeben und der dritte Treffer war der richtige. Microsofts MSDN :
sowas ? :
|
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 11.05.2014 ▲ |
|
|
|
|
maroro | Ja Fast und vielen Dank. Selbst wenn ich die Seite selbst gefunden hätte wäre ich nicht in der Lage gewesen daraus was in XProfan zu basteln. Ich komme an C++ nicht ran. Zum anderen kann ich mir mit dem Programm nur die bereits eingehangenen Volumename anzeigen lassen. ich brauche aber auch die wo Mountvol "*** keine Bereitstellungspunte ***" sagt. Ich habe mit meinen bescheidenen Kenntnissen versucht den Quelltext weiterzuentwickeln hänge aber an einer Fehlermeldung (Lesefehler Kernel32)
Fehler selbst gefunden Findnextvolume will immer das gleiche handle. Zu früh gefreut Windows7 funktioniert WinXP nicht...
Declare Mem buffer
Declare String s
Declare vh&'handle
Dim buffer, 50
Def @GetVolumeNameForVolumeMountPoint(3) !"KERNEL32","GetVolumeNameForVolumeMountPointA"
Def @FindFirstVolume(2) !"KERNEL32","FindFirstVolumeA"
Def @FindNextVolume(3) !"KERNEL32","FindNextVolumeA"
whileloop 5
print chr$(&loop+66)+":\"
s = chr$(&loop+66)+":\"'"C:\"
@GetVolumeNameForVolumeMountPoint(Addr(s), buffer, SizeOf(buffer))
Print String$(buffer, 0)
clear buffer
endwhile
vh& = @FindFirstVolume( buffer, SizeOf(buffer))
Print String$(buffer, 0)
clear buffer
whileloop 5
@FindNextVolume( vh&, buffer, SizeOf(buffer))
Print String$(buffer, 0)
clear buffer
endwhile
Waitkey
Dispose buffer
End
|
|
|
| |
|
|
|
H.Brill | Bei den C++ Deklarationen ist es ja ganz leicht.
Numerische Parameter gehen alle. Bei Strings mußt du halt per Def - Deklaration die Adresse (Addr(s)) übergeben oder du nimmst eben auch einen Bereich oder Pointer. Wenn du einen Parameter übergebist, der von der API-Funktion beschrieben wird (_Out_), nimmst du am besten einen Bereich.
Das ist der sicherste Weg. Man könnte zwar auch einen String nehmen, der mit Space(N) vorbelegt wird, das ist aber nicht immer so sicher wie ein Bereich, da der String Nullterminiert ist und manche API-Funktionen das nicht mögen.
Ist dann auch schwierig, die Fehlerquelle ausfindig zu machen, wenns nicht funktioniert.
Also merke : wenn ein buffer und ein weiter Parameter mit dessen Länge verlangt wird, am besten einen Bereich nehmen.
PS: Wenn es bei versch. Windows Versionen nicht funktioniert, kann es durchaus sein, daß MS die Funktion wegoptimiert hat oder die Parameter geändert. Das steht aber meist in der Doku der MSDN dabei. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 11.05.2014 ▲ |
|
|
|
|
maroro | also der Fehler bei XP entsteht dadurch das FindFirstVolume -1 als Handle zurückgibt womit FindNextVolume nichts anfangen kann. Beide Funktionen sind auch für XP angegeben. Ich habe mal die FindFirstVolumeW (Unicode) anstatt FindFirstVolumeA (ANSI) verwendet auch für Findnext. Jetzt läuft es auch unter XP durch nur enthält der Buffer nur ein "\" gibt's ne Lösung das die "W" das ausspuckt oder ist doch by by XP angesagt. |
|
|
| |
|
|
|
H.Brill | Nimm mal beim Auslesen des Buffers StringW$(). Das ist normalerweise für Unicode (UTF-8) bestimmt.
Also
Da könntest du sogar mit $WinVer prüfen, ob es XP ist und dann entsprechend die A oder W - Version aufrufen.
Vorausgesetzt, die Unicode - Variante würde nicht mit WIN7 funktionieren. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 11.05.2014 ▲ |
|
|
|
|
maroro | Fertig. Funktioniert so unter Win7 und XP. Vielen Dank an H.Brill.
'getestet unter Window7 32Bit und XP 32bit
Declare Mem buffer
Declare String s
Declare vh& ,er&'handle ,Rückgabewert
Dim buffer, 60
Def @GetVolumeNameForVolumeMountPoint(3) !"KERNEL32","GetVolumeNameForVolumeMountPointA"
Def @FindFirstVolume(2) !"KERNEL32","FindFirstVolumeW"
Def @FindNextVolume(3) !"KERNEL32","FindNextVolumeA"
Def @FindVolumeClose(1) !"KERNEL32","FindVolumeClose"
'Volume GUID die in einem Mountpoint eingehangen sind
whileloop 8
print chr$(&loop+66)+":\"
s = chr$(&loop+66)+":\"'"C:\"
@GetVolumeNameForVolumeMountPoint(Addr(s), buffer, SizeOf(buffer))
Print String$(buffer, 0)
clear buffer
endwhile
Print "-----------------------------------------------------------"
'Alle Volume GUID
vh& = @FindFirstVolume( buffer, SizeOf(buffer))
Print "V: "+str$(vh&)'Volumehandle
If vh& > 0
'Print String$(buffer, 0)
Print StringW$(buffer, 0)
clear buffer
er& = 1
while er& = 1
er& = @FindNextVolume( vh&, buffer, SizeOf(buffer))
Print "E: "+str$(er&)'Volume gefunden
Print String$(buffer, 0)
'Print StringW$(buffer, 0)
clear buffer
endwhile
er& = @FindVolumeClose(vh&)
Print "C: "+str$(er&)'geschlossen
endif
Waitkey
Dispose buffer
End
|
|
|
| |
|
|
|
H.Brill | Freut mich, daß ich da richtig vermutete und es läuft. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 11.05.2014 ▲ |
|
|
|