Partitionen einer Festplatte



  • Hi!

    Wenn du das s.seekg(512); weglassen würdest, könntest du mit obigen Code den Bootsektor der Partition C: auslesen. Leider bekommst du damit nicht raus wieviel Partitionen tatsächlich vorhanden sind.
    Oft stehen die gewünschten Informationen im Bootsektor, allerdings ist das abhängig vom jeweiligen Dateisystem, mit welchen der Datenträger Formatiert wurde.

    grüße



  • Wenn man so wirklich an das laufwerk kommt, könnte man das bitte in die FAQ aufnehmen ?



  • Steh ich nun total neben mir oder übersehe ich tatsächlich nur das seek?!



  • [edit]
    das seek rausgenommen denn das Beispiel sollte auf den Bootsektor abzielen, hatte es beim experimentieren reingesetzt weil ich mal mitten drinn 5MB lesen wollte und beim aufbereiten vergessen. Zudem ein return eingefügt falls der Stream nicht zu öffnen ist
    [/edit]



  • Ja schon, das sah ich schon bei deinem ersten Beitrag.

    Nur bin ich der Meinung, dass hier kein seek vorhanden ist...

    #include <fstream>
    #include <iostream>
    #include <vector>
    int main(int argc, char* argv[])
    {
    std::ifstream s;

    std::vector<char> t;
    t.resize(512);
    t.reserve(512);
    s.open( "\\\.\\C:", std::ios_base::in | std::ios_base::binary );

    if ( !s )
    {
    std::cout << "konnte nicht geoeffnet werden\n";
    return 20;
    }

    s.read(&t[0],512);
    s.close();
    reutrn 0;
    }

    Oder bin ich nun komplett bekloppt 🙂
    Vielleicht bekomm ich ja auch gleich die Pappnase auf 🤡



  • Na das Seek steht da nicht mehr, weil ich es, wie es im Edit steht, entfernt habe 🤡

    Ich hatte den Beitrag damals gelesen und da wurde der Bootsektor genommen. Ich hatte mir das dann einfach zusammen gebastelt und wollte auch in diesem Beitrag auf den Bootsektor hinaus.

    Da für mich nur Datenmüll kam hatte ich mich mit seek auf verschiedene "Positionen" gesetzt und einfach mal nen großen Block gelesen.

    Kurz: Du siehst kein seek weil da kein seek (mehr) steht 😉

    Bevor David gepostet hat stand da (sinngemäß, hatte noch bereinigungen vom VS egeinen kram gemacht):

    #include <fstream> 
    #include <iostream> 
    #include <vector> 
    int main(int argc, char* argv[]) 
    { 
        std::ifstream s; 
    
        std::vector<char> t; 
        t.resize(512); 
        t.reserve(512); 
        s.open( "\\\\.\\C:", std::ios_base::in | std::ios_base::binary ); 
    
        if ( !s ) 
        { 
            std::cout << "konnte nicht geoeffnet werden\n"; 
            return 20; 
        } 
    
        s.seekg(512); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        s.read(&t[0],512); 
        s.close(); 
        reutrn 0; 
    }
    


  • Nu hab ichs gerafft 🙂

    Vielen Dank erstmal! Ich probier da mal einwenig rum!
    Sonst meld ich mich nochmal!

    Frohes schaffen noch!

    P.S.: Sehr effektives Forum!
    --> Da werden Sie geholfen 🕶



  • Doch Knuddlbaer das funktioniert wirklich.

    Hier mal schnell ein Dump meines Bootsektors!

    eb 52 90 4e 54 46 53 20 20 20 20 00 02 08 00 00
    00 00 00 00 00 f8 00 00 3f 00 ff 00 3f 00 00 00
    00 00 00 00 80 00 80 00 b0 b5 51 08 00 00 00 00
    00 00 0c 00 00 00 00 00 5b 1b 85 00 00 00 00 00
    f6 00 00 00 01 00 00 00 78 78 bf bc a1 bf bc 98
    00 00 00 00 fa 33 c0 8e d0 bc 00 7c fb b8 c0 07
    8e d8 e8 16 00 b8 00 0d 8e c0 33 db c6 06 0e 00
    10 e8 53 00 68 00 0d 68 6a 02 cb 8a 16 24 00 b4
    08 cd 13 73 05 b9 ff ff 8a f1 66 0f b6 c6 40 66
    0f b6 d1 80 e2 3f f7 e2 86 cd c0 ed 06 41 66 0f
    b7 c9 66 f7 e1 66 a3 20 00 c3 b4 41 bb aa 55 8a
    16 24 00 cd 13 72 0f 81 fb 55 aa 75 09 f6 c1 01
    74 04 fe 06 14 00 c3 66 60 1e 06 66 a1 10 00 66
    03 06 1c 00 66 3b 06 20 00 0f 82 3a 00 1e 66 6a
    00 66 50 06 53 66 68 10 00 01 00 80 3e 14 00 00
    0f 85 0c 00 e8 b3 ff 80 3e 14 00 00 0f 84 61 00
    b4 42 8a 16 24 00 16 1f 8b f4 cd 13 66 58 5b 07
    66 58 66 58 1f eb 2d 66 33 d2 66 0f b7 0e 18 00
    66 f7 f1 fe c2 8a ca 66 8b d0 66 c1 ea 10 f7 36
    1a 00 86 d6 8a 16 24 00 8a e8 c0 e4 06 0a cc b8
    01 02 cd 13 0f 82 19 00 8c c0 05 20 00 8e c0 66
    ff 06 10 00 ff 0e 0e 00 0f 85 6f ff 07 1f 66 61
    c3 a0 f8 01 e8 09 00 a0 fb 01 e8 03 00 fb eb fe
    b4 01 8b f0 ac 3c 00 74 09 b4 0e bb 07 00 cd 10
    eb f2 c3 0d 0a 46 65 68 6c 65 72 20 62 65 69 6d
    20 4c 65 73 65 6e 20 64 65 73 20 44 61 74 65 6e
    74 72 84 67 65 72 73 00 0d 0a 4e 54 4c 44 52 20
    66 65 68 6c 74 00 0d 0a 4e 54 4c 44 52 20 69 73
    74 20 6b 6f 6d 70 72 69 6d 69 65 72 74 00 0d 0a
    4e 65 75 73 74 61 72 74 20 6d 69 74 20 53 74 72
    67 2b 41 6c 74 2b 45 6e 74 66 0d 0a 00 00 00 00
    00 00 00 00 00 00 00 00 83 a8 b6 ce 00 00 55 aa
    

    3 Bytes - Jmp Instruction

    eb 52 90 .. .. .. .. .. .. .. .. .. .. .. .. ..
    

    8 Bytes - OEM ID

    .. .. .. 4e 54 46 53 20 20 20 20 .. .. .. .. .. -> NTFS
    

    25 Bytes - BPB
    48 Bytes Extended BPB

    .. .. .. .. .. .. .. .. .. .. .. 00 02 08 00 00 -> 2 Bytes/Sektor, 8 Sektors/Cluster, 8 Reserved Sectors
    00 00 00 00 00 f8 00 00 3f 00 ff 00 3f 00 00 00 -> F8 (Media Descriptor), 16.128 Sectors/Track, 65.280 Heads
    						   1.056.964.608 Hidden Sectors
    00 00 00 00 80 00 80 00 b0 b5 51 08 00 00 00 00 -> 12.733.172.616.261.533.696 Total Sectors
    00 00 0c 00 00 00 00 00 5b 1b 85 00 00 00 00 00 -> 13.194.139.533.312 Logical Cluster Num for $MFT
    						   6.564.987.116.869.124.096 Logical Cluster Num for $MFTMirr
    f6 00 00 00 01 00 00 00 ff ff ff ff ff ff ff ff -> 4.127.195.136 Clusters Per File Record Segment
    						   268.435.456 Clusters Per Index Block
    						   ffffffffffffffff Volume Serial Number
    00 00 00 00 .. .. .. .. .. .. .. .. .. .. .. .. -> 00 00 00 00 Checksum
    

    426 Bytes - Bootstrap Code

    .. .. .. .. fa 33 c0 8e d0 bc 00 7c fb b8 c0 07
    8e d8 e8 16 00 b8 00 0d 8e c0 33 db c6 06 0e 00
    10 e8 53 00 68 00 0d 68 6a 02 cb 8a 16 24 00 b4
    08 cd 13 73 05 b9 ff ff 8a f1 66 0f b6 c6 40 66
    0f b6 d1 80 e2 3f f7 e2 86 cd c0 ed 06 41 66 0f
    b7 c9 66 f7 e1 66 a3 20 00 c3 b4 41 bb aa 55 8a
    16 24 00 cd 13 72 0f 81 fb 55 aa 75 09 f6 c1 01
    74 04 fe 06 14 00 c3 66 60 1e 06 66 a1 10 00 66
    03 06 1c 00 66 3b 06 20 00 0f 82 3a 00 1e 66 6a
    00 66 50 06 53 66 68 10 00 01 00 80 3e 14 00 00
    0f 85 0c 00 e8 b3 ff 80 3e 14 00 00 0f 84 61 00
    b4 42 8a 16 24 00 16 1f 8b f4 cd 13 66 58 5b 07
    66 58 66 58 1f eb 2d 66 33 d2 66 0f b7 0e 18 00
    66 f7 f1 fe c2 8a ca 66 8b d0 66 c1 ea 10 f7 36
    1a 00 86 d6 8a 16 24 00 8a e8 c0 e4 06 0a cc b8
    01 02 cd 13 0f 82 19 00 8c c0 05 20 00 8e c0 66
    ff 06 10 00 ff 0e 0e 00 0f 85 6f ff 07 1f 66 61
    c3 a0 f8 01 e8 09 00 a0 fb 01 e8 03 00 fb eb fe
    b4 01 8b f0 ac 3c 00 74 09 b4 0e bb 07 00 cd 10
    eb f2 c3 0d 0a 46 65 68 6c 65 72 20 62 65 69 6d
    20 4c 65 73 65 6e 20 64 65 73 20 44 61 74 65 6e
    74 72 84 67 65 72 73 00 0d 0a 4e 54 4c 44 52 20
    66 65 68 6c 74 00 0d 0a 4e 54 4c 44 52 20 69 73
    74 20 6b 6f 6d 70 72 69 6d 69 65 72 74 00 0d 0a
    4e 65 75 73 74 61 72 74 20 6d 69 74 20 53 74 72
    67 2b 41 6c 74 2b 45 6e 74 66 0d 0a 00 00 00 00
    00 00 00 00 00 00 00 00 83 a8 b6 ce 00 00 .. ..
    

    2 Bytes - End Of Sektor Marker

    .. .. .. .. .. .. .. .. .. .. .. .. .. .. 55 aa
    

    Hier noch weiterführende Informationen: http://www.ntfs.com/ntfs-partition-boot-sector.htm

    Auf die Partition kann zugegriffen werden mit:

    std::fstream f( "\\\\.\\C:", std::ios_base::in | std::ios_base::binary );
    

    Allgemein also:

    \.\Bezeichnung:

    Danach kann mit ganz normalen Leseoperationen gearbeitet werden.

    grüße



  • Hallo,

    dann schon mal vielen Dank. Ist das ganze Standartkonform ? Ich habe nie gelesen das man mittels \\\.\<Laufwerk> zugriffe auf diese Art machen kann, zumal in dem Beitrag "damals" noch was mit \\\.\\Partition0 stand.

    Hast Du zufällig einen Link der das Thema weiterbehandelt ?

    fstream \\\.\\

    ist kein guter Suchbegriff für Googel 😞



  • Das is Plattformabhängig. Unter Windows kannst du per \.\c: auf deine Partitionen zugreifen. Unter Linux sind alle Partitionen unter \dev\ zu finden, z.B. \dev\hda1.

    grüße



  • Besten Dank!


Anmelden zum Antworten