Datenträger auslesen / ändern - wie?



  • Hallo,

    ich versuche gerade mich in C++ einzuarbeiten.
    (Es wird, es wird... und ich glaube es gibt noch Hoffnung 😉 )

    Ich Arbeite beruflich in einer Firma, welche Kartenleser entwickelt.
    Heute bin ich darauf gestoßen:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/disk_management_control_codes.asp
    Das sieht ja echt mächtig aus... Allerdings habe ich keine Ahnung, wie ich mit diesen Funktionen umgehen soll...

    Hintergrund: Ich würde gerne ein Programm schreiben, welches eine Karte (z.B. Compact Flash oder SD) neu formatiert, bzw. die Partitionstabelle neu schreibt. (Endziel)
    Ich denke viele Targa-Kunden würden sich über so ein Programm freuen 😉

    Zum lernen würde es mir schon reichen, wenn ich nur Infos aus der Karte lesen könnte.
    Wie z.B. die Partitionstabelle.. etc.

    Gibt es dafür eine Tutorial Seite, oder kann mir irgendjemand die Grundlagen erklären?

    mfg
    trequ



  • Kommt drauf an ob die du Karte direkt als "Datei" ansprechen kannst. In dem Fall kannst du einfach mit CreateFile, ReadFile, WriteFile usw. arbeiten, ansonsten musst du deinen eigenen Treiber schreiben



  • Hallo,

    ich denke nicht, dass man in die Partitonstabelle der Karte eine Datei schreiben kann.
    Wie soll das denn gehen?

    Ich kenne von der Karte ja den Laufwerksbuchstaben, den ich dann in z.B. \.\X: umwandeln kann.
    Und das in der MSDN (siehe Link oben) sind doch Funktionen, welche die benötigten Dinge erledigen können, oder?

    Ich Frage mich nur, wie ich diese Funktionen verwende, da es keinerlei Beispiele gibt...

    mfg
    trequ



  • Wenn ich ScriptGod richtig verstehe meinte er wohl, das du unter C++ als Datei auf die Speicherkarte zugreifst. Obwohl ich glaube nicht wirklich das das funktioniert.

    Wenn du jetzt ne ganz einfache Lösung willst, du hast gesagt das die Karte richtig erkannt wird (mit laufwerksbustaben).

    system("format x");

    Schreib zwischen die Anführungszeichen den format befehl von dos bzw. cmd musst mal gucken ob der noch parameter kennt wie dateisystem oder so.



  • Hallo,

    also:

    1. Wird die Karte gar nicht erkannt. Sie ist das Medium von Laufwerk X:
    2. Legt ein Kartenleser meist 4 oder 5 Wechseldatenträger an, die niemand unterscheiden kann.
    Ich habe eine Funktion, welche in der Registry die Laufwerke den Drives zuordnet.
    3. Will ich die Karte nicht einfach formatieren. Ich will Sie - nach meinen Vorstellungen - neu schreiben.
    Beispiel: SmartMedia. Es kommt immer wieder vor, dass die CIS (Card Information Strucure) einer Karte durch eine Olympus Kamera mit Panorama Format beschädigt / zerstrört wird. Und daher will ich die Partitionstabelle neu schreiben.

    mfg
    trequ



  • Tja jetzt frage ich dich: wie willst du sie neu schreiben

    Willst du irgendeine binäre Codefolge schreiben oder wie stellst dir das vor ???

    Und wie du das bei Punkt 2 meinst kann ich auch nicht ganz nachvollziehen. Legt dein Kartenleser jetzt (wie beim cd-rom lauferwerk) Laufwerke an, die auch leer sein können?

    Und das eine Funktion einem Lauferwerk (deutsch) ein Laufwerk (englisch) zuordnet ist mir auch nicht wirklich klar.



  • Hallo,

    ich würde folgendes machen:

    - neue Karte nehmen, welche funktioniert.
    - Ein Abbild erstellen, welches die ersten 50KB (mehr? müsste nachschauen...) der Karte enthält, erstellen.
    Format: Keine Ahnung - vermutlich binär. Aber ist das nicht egal? Ich lese einfach das Format aus, dass ich auch schreibe. Wenn ich in den Bereich schreiben kann, kann ich doch bestimmt auch lesen...?
    So nach dem Motto:
    1. Karte(OK) rein, in eine Datei lesen
    2. Karte(Fehler) rein, Datei schreiben.
    3. Karte(Fehler) Formatieren.

    Danach sollte alles wieder passen.

    mfg
    trequ



  • Dann musst du das wohl wirklich so machen wie scriptgod das vorgeschlagen hat die Karte als Datei ansprechen (binär). Den Kram binär auf der Festplatte speichern. Alles von der Fehlerhaftenkarte (binär) kopieren. Deine ersten 50kb auf die karte schreiben und den rest mit den daten "anhängen".



  • Hallo,

    ich habe offenbar verwechselt, dass man die ganze Karte als Datei ansprechen kann..

    Gerade habe ich das hier zum laufen gebracht:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/calling_deviceiocontrol.asp

    Die Ausgabe sieht so aus:

    printf("Cylinders = %I64d\n", pdg.Cylinders);
    printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
    printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);
    printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);
    

    Das printf ist allerdings ein Konsolenbefehl.
    Meine Frage ist jetzt, wie ich die Ausgabe in eine brauchbares Format kriege.

    Also CString oder sowas, was man dann per MessageBox ausgeben kann.

    mfg
    trequ



  • CString besitzt eine Format funktion die so aufgebaut ist wie printf.

    Wenn du die Karte als Datei geöffnet hast, kannst du auch mit DeviceIoControl andere Features nutzen z.B. Partitionstabelle auslesen. Brauchs dafür nicht direkt binär schreiben.



  • Schau dir mal wsprintf an. 🙂


Anmelden zum Antworten