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 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\_DIRECT
structur 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