![]() |
Re: MBR auslesen
Administratorrechte hast Du?
[edit] Probiert - geht bei mir auch nicht (XP SP 3) [/edit] |
Re: MBR auslesen
Ja, Adminrechte hab ich. XP pro SP2
|
Re: MBR auslesen
So gehts bei mir
Delphi-Quellcode:
Gruss, Jörn
procedure TForm1.Button1Click(Sender: TObject);
var nBytesRead , fHandle : Cardinal; Buffer : Array of Byte; Success : Boolean; begin fHandle := CreateFile( PChar('\\.\PHYSICALDRIVE0'), // ...PHYSICALDRIVE0 <--<< first Harddisk ( Primary Master ) GENERIC_READ, // ...read only FILE_SHARE_WRITE, // ...Wichtig, nicht das es Probleme gibt nil, OPEN_EXISTING, // ...ist klar warum 0, 0); if fHandle = INVALID_HANDLE_VALUE then begin ShowMessage('CreateFile - Error: Invalid Handle'); exit; end; SetLength(Buffer,512); // ....read the first 512 Byte (MBR) if not ReadFile(fHandle, Buffer[0], 512, nBytesRead, nil) then begin ShowMessage('ReadFile - Error'); end; CloseHandle(fHandle); // ...Schnell wieder den MBR zu-machen ;-) // --- nun sollte man den MBR im Array "Buffer" haben --- end; |
Re: MBR auslesen
Jo, bei mir auch (was so ein paar läppische Backslashes nicht ausmachen können :mrgreen:).
|
Re: MBR auslesen
Entschuldigung, die habe ich unterschlagen. ( Absichtlich ?! :gruebel: :stupid: )
|
Re: MBR auslesen
Huch erst nichts und auf einmal so viel hier drin. :P
Bin zwischenzeitlich zum selben Ergebnis gekommen, kam aber noch nicht dazu, das zu posten (Schule und so...). :wink: Das ganze lässt sich noch mit SetFilePointer errweitern um beliebige Sektoren auszulesen und mit WriteFile und GENERIC_WRITE Rechten lässt sich auch schreiben, auch dazu sind Adminrechte von nöten. Dabei sollte allerdings - insbesondere im MBR (erster Sektor) und den folgenden Sektoren - vorsichtig sein, da hier falsche Änderungen sehr schnell dazu führen können, dass sich das System nicht mehr booten lässt.
Delphi-Quellcode:
Danke an alle die MBR-Sache hat sich für mich damit erledigt. :thumb: :dp:
type
TMBR = array[0..511] of Byte; var Mbr: TMBR; i: Word; Errorcode: Cardinal; function ReadMBR(var Buffer: TMBR): Boolean; var hDevice: THandle; //Handle der Festplatte NumberOfBytesRead: DWORD; begin //Handle anforern hDevice:= CreateFile(LPCTSTR('\\.\PHYSICALDRIVE0'), GENERIC_READ, //Schreib-/Leserechte: nur Lesen FILE_SHARE_READ or FILE_SHARE_WRITE, //Lese- und Schreibrechte teilen PSecurityAttributes(nil), //lpSecurityAttributes OPEN_EXISTING, //nur öffnen wen nschon vorhanen (Standard bei allem außer Dateien) 0, //dwFlagsAndAttributes, THandle(0)); //hTemplateFile: NULL if (hDevice = INVALID_HANDLE_VALUE) then begin Result:= false; //Fehler Exit; end; //auslesen, bei Fehler ggf. GetLastError; Fehler wenn <> 0 Result:= ReadFile(hDevice, {@}Buffer, 512, {@}NumberOfBytesRead, nil); //NumberOfBytesRead enthält die gelesenen Bytes. //Handle freigeben CloseHandle(hDevice); end; begin if(ReadMBR(Mbr)) then begin for i:= 0 to High(Mbr) do begin Write(Format('%.2x', [Mbr[i]])); //16 Werte pro Zeile if(((i+1) mod 16) <> 0) then Write(' ') else Writeln; end; end else begin Write('Errorcode: '); Errorcode:= GetLastError; Writeln(Errorcode); case Errorcode of 5: Writeln('Access is denied.'); else Writeln('Unknown error.'); end; end; Readln; end. (Ich schau mir nur grade historische Linux-Kernel an und wollte den MBR mal bei einem funktionierenden System betrachten, komme aber im Moment noch nicht so wirklich drauf wie die Funktionsweise der Loader so funktioniert :gruebel: Mag dran liegen das sie in Asm sind und mir zum Thema (also Kernel nicht Asm grundsätzlich) noch insgesamt zuviel Hintergrundwissen fehlt.) |
Re: MBR auslesen
Zitat:
|
Re: MBR auslesen
Naja es gibt sicherlich auch Ausnahmefälle wo sowas sinnvoll sein kann, Tools zum partitionieren oder zum resizen von Partitionen, wenn Windows damit grundsätlich Propleme hätte könnte man sowas ja zum Beispiel ja nicht ohne windows-eigene Programme lösen oder Bootmanager verwenden, dennoch sollte man wissen was man macht (und sowas besser in einer VM testen).
|
Re: MBR auslesen
Zitat:
Naja, aber aus der Zeit von Win 3.1 sind wir raus. :stupid: [/OT] |
Re: MBR auslesen
PChar('\\.\PHYSICALDRIVE0') :
Wie bekomme ich raus, was für andere Geräte am System angeschlossen sind ? MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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 by Thomas Breitkreuz