Laden...

Mein TrueCrypt Automounter: Festplatten abfragen?

Erstellt von 7.e.Q vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.051 Views
7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren
Mein TrueCrypt Automounter: Festplatten abfragen?

Hi Leute,

da mit die Funktionalität der meisten Automounter für TrueCrypt nicht 100% zusagt, möchte ich mir so'n Teil selber drechseln.

Ich brauche dafür die Liste aller im Gerät verbauten Festplatten samt Partitionen. Dies lässt sich sicher irgendwie abfragen.

Da Windows Vista gern mal die Reihenfolge der Festplatten verdreht, also eine bestimmte Festplatte mal \Device\Harddist1 und mal \Device\Harddisk4 sein kann, brauche ich irgendeine Information mit der ich die Festplatte sauber identifizieren kann, egal an welchem Strang sie hängt, und darüberhinaus einen Weg, um aus diesem Identifier dann den \Device\Harddisk... String zu machen.

Hat da jemand 'ne zündende Idee für mich?

Danke!

Grüße,
Hendrik

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo 7.e.Q,

in Win32 sollte es passende API-Funktionen geben.

herbivore

S
401 Beiträge seit 2008
vor 14 Jahren

Servus,

jede Festplatte besitzt eine uuid. Der Linux-Befehl lautet

ls /dev/disk/by-uuid -al    #UUIDs anzeigen

Die Windows API muss hier eine Methode bereitstellen. Die MSDN Suche verlief erfolglos, aber das heißt bei mir nichts 🙂 Wenn du die entsprechende Passage gefunden hast, wäre ich dir über die Information dankbar.

Gruß
Thomas

U
457 Beiträge seit 2006
vor 14 Jahren

++

Laufweksbuchstaben ermitteln
++

Variante 1


GetLogicalDrives();

Return Value

If the function succeeds, the return value is a bitmask representing the currently available disk drives. Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on.
MSDN

Variante 2


DWORD WINAPI GetLogicalDriveStrings(  __in   DWORD nBufferLength,  __out  LPTSTR lpBuffer);

Parameters

nBufferLength [in]

The maximum size of the buffer pointed to by lpBuffer, in TCHARs. This size does not include the terminating null character. If this parameter is zero, lpBuffer is not used.  

lpBuffer [out]

A pointer to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, plus with an additional null character. Each string is a device name.  

Return Value

If the function succeeds, the return value is the length, in characters, of the strings copied to the buffer, not including the terminating null character. Note that an ANSI-ASCII null character uses one byte, but a Unicode null character uses two bytes.

If the buffer is not large enough, the return value is greater than nBufferLength. It is the size of the buffer required to hold the drive strings.

If the function fails, the return value is zero. To get extended error information, use the GetLastError function.
MSDN

Hier mal eine C++ Lösung die ich mal benutzt habe:



	int size = GetLogicalDriveStrings ( 0, 0 );
	char *pDrives = new char[ size + 1];
	GetLogicalDriveStrings ( size, pDrives );

	while (*pDrives)
	{
		string Pfad = pDrives;
		Pfad.erase(2);
		Rekursive_Datei_Suche(Pfad);
		pDrives = &pDrives[strlen(pDrives) + 1];
	}//Alle Laufwerke nach Dateie durchsuchen und zum Server schicken 

++

Typ des Laufwerks ermitteln
++

The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

UINT GetDriveType(LPCTSTR lpRootPathName 	// address of root path 
);	

Parameters

lpRootPathName

Points to a null-terminated string that specifies the root directory of the disk to return information about. If lpRootPathName is NULL, the function uses the root of the current directory.

Return Values

The return value specifies the type of drive. It can be one of the following values:

Value Meaning
0 The drive type cannot be determined.
1 The root directory does not exist.
DRIVE_REMOVABLE The drive can be removed from the drive.
DRIVE_FIXED The disk cannot be removed from the drive.
DRIVE_REMOTE The drive is a remote (network) drive.
DRIVE_CDROM The drive is a CD-ROM drive.
DRIVE_RAMDISK The drive is a RAM disk.

MSDN

Mit mehr kann ich im Moment nicht dienen. Aber einfach mal die MSDN durchforsten und nach Hard Disk Info oder so suchen. Ansonsten könnte man vielleicht auch was mit der WMI machen?

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren

Uihah, danke.

Ja, WMI ist wohl der einfachste Weg. Wenn ich nicht das Problem hätte, dass bei einer Abfrage von Win32_DiskPartition die System.Management.dll eine Exception wirft. Denn genau diese Abfrage brauche ich leider. Sie gibt mir genau das zurück, was ich benötige.

Sehr eigenartiges und mal wieder ärgerliches Verhalten. Warum können Computer nicht einfach mal das machen, was man von ihnen verlangt? Ich weiß, die Dinger sind dazu gedacht, Probleme zu lösen, die man ohne sie gar nicht hatte.

U
457 Beiträge seit 2006
vor 14 Jahren

Was kommt denn für eine Exception und weißt du wieso sie kommt?

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 14 Jahren

Es kommt eine FileLoadException in der System.Management.dll und es scheint, als ob ein anderes Programm irgendwie die WMI Abfrage blockiert.

//edit: die Abfrage blockiert, wenn TrueCrypt Laufwerke gemountet sind. Ich teste noch mal, ob es bei Containern, bei Festplatten/Partitionen oder bei beidem auftritt...

//edit: also es liegt an gemounteten TrueCrypt Partitionen. Wenn ich nur Container gemountet hab, kommt keine Exception.