Registriert seit: 1. Feb 2018
3.691 Beiträge
Delphi 11 Alexandria
|
AW: Direktes lesen auf dem physischen Datenträger
12. Jun 2018, 11:41
dass er auf den MBR zugreifen möchte
Delphi-Quellcode:
type
TMBR = Array of Byte;
Function GetMBR ( const DiskNumber: Byte; const MBRSize: Cardinal; out MBR: TMBR): Boolean;
var
nBytesRead ,
fHandle : Cardinal;
begin
fHandle := CreateFile(
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;
SetLength(MBR, MBRSize);
Result := ReadFile(fHandle, MBR[0], MBRSize, nBytesRead, nil);
if nBytesRead-1 <> High(MBR) then Result := False;
if not Result then
begin
ShowMessage(' ReadFile - Fehler' +#13#10#13#10+
' Es sollten '+IntToStr(High(MBR))+ ' bytes gelesen werden' +#13#10+
' aber nur '+ IntToStr(nBytesRead-1) +' bytes waren lesbar!');
end;
CloseHandle(fHandle);
end;
So könnte ein möglicher Aufruf aussehen:
Delphi-Quellcode:
procedure x;
var
MyMBR: TMBR;
begin
if GetMBR(0, 512, MyMBR) then // <<-- 512 als MBR Größe ist nicht immer korrekt, also vorher diesen Wert ermitteln, das dient nur als Beispiel
begin
// mach was mit MyMBR
end;
end;
So könnte ein möglicher Ansatz für MBR sein.
Geändert von KodeZwerg (12. Jun 2018 um 12:11 Uhr)
Grund: Code optimiert
|
|
Zitat
|