Einzelnen Beitrag anzeigen

wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#3

Re: NTFS-Bootblock mit CreateFile auslesen?

  Alt 27. Mär 2008, 11:33
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.
  Mit Zitat antworten Zitat