Vorhandene Partitionen ermitteln
-
Ok ich dachte weil es dem FindFirstFile ähnelt, würde es auch funktionieren aber das tut es leider doch nicht weil mein compiler meckert
1>..\Searcher.cpp(42) : error C3861: "FindFirstVolume": Bezeichner wurde nicht gefunden. 1>..\Searcher.cpp(46) : error C3861: "FindNextVolume": Bezeichner wurde nicht gefunden.Und in der Library (Offline) kann ichs auch nicht finden...
+Ja ich hab Windows.h drin
-
Wiedermal die Uralt-PSDKs am Start...
To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0500 or later. For more information, see Using the SDK Headers.
Haben wir das auch brav gemacht vorm #include?
MfG SideWinder
-
ja danke, jetzt gehts, dafür gibts ein prob mit der var die den namen der partition speichern sollte:
LPSTR str; if(hF!=INVALID_HANDLE_VALUE) //hF = Handle von FindFirstVolume while(FindNextVolume(hF,str,128)) // str muss ein LPSTR seinhabs zuerst mit nem char array versucht, funktioniert aber nicht und die Ausgabe funktioniert deshalb nicht...
-
LPSTR hat keinen Speicher, ist ein Pointer ins nirgendwo.
MfG SideWinder
-
hm...wie bekomm ich das hin dass ich den namen in einer variable ablegen kann?
-
hmmmm? schrieb:
hm...wie bekomm ich das hin dass ich den namen in einer variable ablegen kann?
Beschäftige Dich bitte mit den Grundlagen von C/C++ bevor Du an das auslesen und evtl. an die Manipulation von Partitionen gehst...

TCHAR str[128];
-
Danke, ja das Problem ist meistens verwende ich die "Grunddatentypen", char, int und dgl.
gibts da vlt ein tutorial oder ne liste oder sowas wo man auch ähnliche datentypen finden kann?
ich mein sowas wie DWORD oder TCHAR hab ich bisher nur durch winapi zeugs mitbekommen und weiß trotzdem noch nicht genau was da der unterschied zu anderen datentypen ist...
-
So hab das jetzt hinbekommen mit dem FindFirstVolume, aber ich bekomm dann:
\?\Volume{7618009f-b2ea-und lauter andere Nummern}
wie bekomm ich daraus nun den Laufwerkbuchstaben?
einfach die Anzahl nehmen und bei A:/ beginnen bringt nichts weil manche Rechner ja nicht mal mehr ein Floppy Laufwerk haben
-
Probier mal QueryDosDevice mit dem "komischen" Namen zu füttern...
-
Danke!
Hab die Backslashs aus den Infos ausgeschnitten und den rest der daten mit QueryDosDevice gefüttert...
dabei kam dannn\Device\HarddiskVolume2 \Device\CdRom0 \Device\HarddiskVolume3 \Device\HarddiskVolume4 \Device\HarddiskVolume5 \Device\HarddiskVolume6 \Device\HarddiskVolume7 \Device\HarddiskVolume7das raus...
aber über die laufwerkbuchstaben sagt mir das doch auch nichts, oder?
-
Der Weg ist umgekehrt. Du fragst nach dem Pfad und GetVolumeInformation sagt Dir auf welchem Volume es liegt.
-
So hab das jetzt mal implementiert, hat auch funktioniert aber zwischenzeitlich hab ichs umgebaut und nun funzt es nicht mehr...ich suche schon seid ner Stunde nach dem Fehler...
Header:
#define partsAnz 512 TCHAR parts[partsAnz][512];Methode:
bool cSearcher::scanHarddiscsForPartitions(){ TCHAR lpRootPathName[512]; TCHAR lpVolumeNameBuffer[512]; DWORD nVolumeNameSize; LPDWORD lpVolumeSerialNumber; LPDWORD lpMaximumComponentLength; LPDWORD lpFileSystemFlags; TCHAR lpFileSystemNameBuffer[512]; DWORD nFileSystemNameSize; int erg=0; TCHAR buffer[512]; int x=0; for(char a='A'; a<='Z';a++){ sprintf_s(buffer,"%c:\\",a); erg=GetVolumeInformation(buffer, lpVolumeNameBuffer, 512, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags,lpFileSystemNameBuffer,512); if(erg!=0) sprintf_s(parts[x],"%s",buffer); x++; } return true; }Hoffe ihr könnt mir helfen!