Zitat von
starY:
Delphi-Quellcode:
DeviceIoControl(DeviceHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
@DiskGeometry, sizeof(DiskGeometry), Dummy, nil);
Dummy muß vom Typ DWORD sein, und wenn in deiner DeviceIoControl()-Deklaration statt "var Returned: DWORD" ein "Returned: PDWORD" steht, dann mußt du "@Dummy" notieren.
BTW: Ab XP gibt es auch IOCTL_DISK_GET_DRIVE_GEOMETRY_EX.
Verrätst du mir bitte noch, wie du die Wiederherstellung der Daten löst? Aktuell waren wir ja da stehen geblieben, daß man mit Administratorrechten sowohl Defragmentierung als auch sektorweises Auslesen durchführen kann. Mehr machst du ja mit maels Beispielcode (noch) nicht (als Auslesen - nicht daß es wieder zu Mißverständnissen kommt).
Nachtrag: Ich bezweifle, daß die IOCTLs irgendwo deklariert sind im Standard-Delphi. Entweder behilfst du dir, indem du sie selber übersetzt, oder du schaust mal in DelphiWorks von Codehunter - er hat IMO Code zum Thema drin. Ansonsten wären die
JEDI JCL und ApiLib (JwaWinIoctl.pas - dort ist der gesuchte Code definitiv drin, aber SF ist grad down) noch eine Anlaufstelle.
PS: Habe mal
CVS-Version 1.6 von der JwaWinIoctl.pas anghangen, damit du nicht auf SF.net angewiesen bist, wenn es doch grad down ist