AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Direktes lesen auf dem physischen Datenträger
Thema durchsuchen
Ansicht
Themen-Optionen

Direktes lesen auf dem physischen Datenträger

Ein Thema von Delphi-Delphin · begonnen am 10. Jun 2018 · letzter Beitrag vom 20. Jun 2018
 
Delphi-Delphin

Registriert seit: 23. Feb 2010
10 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Direktes lesen auf dem physischen Datenträger

  Alt 19. Jun 2018, 21:54
Das Programm ist jetzt so weit, das die Infos zur Partition angezeigt werden und nach der Auswahl der erste Sektor ausgelesen wird.
Siehe Screenshot.

MBR_Auslesen.png

Allerdings funktioniert das Offset bei ReadFile nicht richtig, bzw. ich konnte nicht wirklich finden, womit der Record von ^Overlapped befüllt werden muss.

Delphi-Quellcode:
type TSECTOR= Array[0..511] of Byte;

const SectorSize = 512;

var Sector: TSector;
  nBytesRead ,
  fHandle : Cardinal;
theOverlapped: Overlapped;

//funktioniert:
Result := ReadFile(fHandle, Sector[0], SectorSize, nBytesRead, nil);

//funktioniert nicht:
theOverlapped.OffsetHigh:=0;
theOverlapped.Offset:=Offset*SectorSize;

Result := ReadFile(fHandle, Sector[0], SectorSize, nBytesRead, @theOverlapped);
Komplette Funktion:
Delphi-Quellcode:
Function GetSector (const PhysDrive: String; const Offset: DWord; out Sector: TSector): Boolean;
const SectorSize = 512;
var
  nBytesRead ,
  fHandle : Cardinal;
  theOverlapped: Overlapped;
begin
  fHandle := CreateFile(
    PChar(PhysDrive), //PChar('\\.\PHYSICALDRIVE'+IntToStr(DiskNumber)),
    GENERIC_READ, FILE_SHARE_WRITE,
    nil,
    OPEN_EXISTING,
    0,
    0);
  if fHandle = INVALID_HANDLE_VALUE then
  begin
    Result := False;
    ShowMessage('CreateFile - Fehler: Invalid Handle' +#13#10#13#10+
                'Hinweis: liegen Admin-Rechte vor?');
    exit;
  end;

  Result := ReadFile(fHandle, Sector[0], SectorSize, nBytesRead, nil);
  if nBytesRead-1 <> High(Sector) then Result := False;
  if not Result then
  begin
    ShowMessage('ReadFile - Fehler' +#13#10#13#10+
                'Es sollten '+IntToStr(High(Sector))+ ' bytes gelesen werden' +#13#10+
                'aber nur '+ IntToStr(nBytesRead-1) +' bytes waren lesbar!');
  end;
  CloseHandle(fHandle);
end;
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Künstliche Intelligenz ist gar nichts - verglichen mit natürlicher Dummheit

Geändert von Delphi-Delphin (19. Jun 2018 um 22:15 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz