Vorhandene Partitionen ermitteln



  • 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 sein
    

    habs 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?


  • Mod

    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\HarddiskVolume7
    

    das raus...
    aber über die laufwerkbuchstaben sagt mir das doch auch nichts, oder?


  • Mod

    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!


Anmelden zum Antworten