auf die Festplatte zugreifen



  • Hallo,

    wie kann ich unter C++/Ansi C auf die Festplatte zugreifen. Dh. sektorweise auslesen. ich möchte MBR auslesen. Ich weiss es geht unter Unix/Linux mit dem Befehl dd if=... und dass unter windows dieses Befehl schon nachprogrammiert wurde.
    Ich habe schon Programm für diese Funktionalitäten unter Assembler geschrieben, leider es funz. nur unter Real-modus, da greife ich auf die Festplatte über int 13h (BIOS).
    Tja, aber wie geht es unter C, C++?? (CreateFile(); ??)

    für Antworten bedanke ich mich im Voraus

    robmir



  • Mit ANSI C/C++ geht es nicht.
    Du musst schon die WinAPI nehmen...
    CreateFile: http://msdn.microsoft.com/library/en-us/fileio/fs/createfile.asp und dann z.B. mit "\.\PHYSICALDRIVE0"



  • ...danke für die Antwort. Mit `CreateFile` habe ich schon versucht aber ich weiss nicht, ob ich mit \_ATA\_PASS\_THROUGH\_DIRECT structur arbeiten soll. Wenn ja dann beim kommpilieren bekomme ich so eine Meldung:

    error C2065: 'IOCTL_ATA_PASS_THROUGH_DIRECT': nichtdeklarierter Bezeichner

    #include <stdio.h>
    #include <windows.h>
    #include <Winioctl.h>
    
    ....
    
    bResult = DeviceIoControl(hDevice,			// device to be queried
          IOCTL_ATA_PASS_THROUGH_DIRECT,			// operation to perform
          NULL, 0,			                        // no input buffer
          pdg, sizeof(*pdg),		                // output buffer
          &junk,			                       // # bytes returned
          (LPOVERLAPPED) NULL);	                       // synchronous I/O
    


  • robmir schrieb:

    aber ich weiss nicht, ob ich mit \_ATA\_PASS\_THROUGH\_DIRECT structur arbeiten soll

    Wenn Du es nicht weisst und Dir auch niemand gesagt hast, dass Du es brauchst, frage ich mich das allerdings auch...



  • hmm....ich habe es nur angenommen, dass ich genau des brauche.

    The ATA_PASS_THROUGH_DIRECT structure is used in conjunction with an IOCTL_ATA_PASS_THROUGH_DIRECT request to instruct the port driver to send an embedded ATA command to the target device.

    ich dachte, dass schon jemand mit dieser Materie Erfahrungen gesammelt hat. 😞



  • Ja... und was wolltest Du jetzt Fragen, was noch nicht beantwortet ist?



  • Wenn ja dann beim kommpilieren bekomme ich so eine Meldung:

    error C2065: 'IOCTL_ATA_PASS_THROUGH_DIRECT': nichtdeklarierter Bezeichner

    1. das ist meine Frage, warum kann es nicht kompiliert werden? 😕 alle header-dateien habe ich eingebunden.

    2. ich bin immer noch nicht sicher, ob es so zugegriffen werden soll.

    Jochen Kalmbach schrieb:

    robmir schrieb:

    aber ich weiss nicht, ob ich mit \_ATA\_PASS\_THROUGH\_DIRECT structur arbeiten soll

    Wenn Du es nicht weisst und Dir auch niemand gesagt hast, dass Du es brauchst, frage ich mich das allerdings auch...

    😕 was meinst Du damit?

    Jochen Kalmbach schrieb:

    Mit ANSI C/C++ geht es nicht.
    Du musst schon die WinAPI nehmen...
    CreateFile: http://msdn.microsoft.com/library/en-us/fileio/fs/createfile.asp und dann z.B. mit "\.\PHYSICALDRIVE0"

    ist mir schon klar, so mache ich auch. Aber bei

    DeviceIoControl()
    

    siehe Fehlermeldung oben.

    naja, das wars. 😉

    und trotzdem Danke für Deine Mühe. 🙂



  • Lass das mit dem DeviceIoControl bleiben. Du brauchst es nicht!
    Einfach mit CateFile öffnen mit SHARE_READ | SHARE_WRITE und dann 512 Bytes mit ReadFile lesen... Fe tig


Anmelden zum Antworten