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\_DIRECTstructur 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\_DIRECTstructur arbeiten sollWenn 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\_DIRECTstructur arbeiten sollWenn 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