Ich hab das mal kurz für dich ausprogrammiert. Über meinen Stil kann man sich streiten, aber denke mal Du wirst alles sehen können, was relevant ist für Dich:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
windows;
// Liest den ersten Sektor von DeviceName in den Speicherbereich, auf den buffer
// zeigt. Sektoren sind dabei immer 512 Bytes groß!
function ReadFirstSector(DeviceName : widestring; buffer : pointer) : boolean;
var
dh : THandle;
// Device Handle
tmp : dword;
// Temporäre Variable
begin
result := false;
dh := CreateFileW(PWideChar(DeviceName), GENERIC_READ, FILE_SHARE_READ
or
FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
// Device konnte nicht geöffnet werden -> Abbruch
if dh = INVALID_HANDLE_VALUE
then exit;
// Sektor lesen
result := (ReadFile(dh, buffer^, 512, tmp,
nil))
and (tmp = 512);
CloseHandle(dh);
end;
var
buffer : pointer;
f :
file;
begin
getmem(buffer, 512);
writeln('
-> Lese Sektor: ', ReadFirstSector('
\\.\PHYSICALDRIVE0', buffer));
assignfile(f, '
sektor.dmp');
rewrite(f, 1);
blockwrite(f, buffer^, 512);
closefile(f);
freemem(buffer);
writeln('
-> Der gelesene Sektor wurde nach sektor.dmp gesichert.');
readln;
end.
Im Endeffekt läuft es in der Tat darauf hinaus, daß du das Plattendevice (\\.\PHYSICALDRIVE0, \\.\PHYSICALDRIVE1 ...) mit CreateFile öffnest und einfach den ersten Sektor (= 512 Bytes) liest.