AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MBR auslesen

Ein Thema von Cyf · begonnen am 30. Nov 2008 · letzter Beitrag vom 30. Mär 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#11

Re: MBR auslesen

  Alt 1. Dez 2008, 15:41
Administratorrechte hast Du?

[edit] Probiert - geht bei mir auch nicht (XP SP 3) [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#12

Re: MBR auslesen

  Alt 1. Dez 2008, 15:51
Ja, Adminrechte hab ich. XP pro SP2
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
bassman

Registriert seit: 8. Apr 2008
18 Beiträge
 
Delphi 2009 Professional
 
#13

Re: MBR auslesen

  Alt 1. Dez 2008, 16:01
So gehts bei mir

Delphi-Quellcode:
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;
Gruss, Jörn
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#14

Re: MBR auslesen

  Alt 1. Dez 2008, 16:04
Jo, bei mir auch (was so ein paar läppische Backslashes nicht ausmachen können ).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#15

Re: MBR auslesen

  Alt 1. Dez 2008, 16:19
Entschuldigung, die habe ich unterschlagen. ( Absichtlich ?! )
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#16

Re: MBR auslesen

  Alt 1. Dez 2008, 18:34
Huch erst nichts und auf einmal so viel hier drin.
Bin zwischenzeitlich zum selben Ergebnis gekommen, kam aber noch nicht dazu, das zu posten (Schule und so...).
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:
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.
Danke an alle die MBR-Sache hat sich für mich damit erledigt.
(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 Mag dran liegen das sie in Asm sind und mir zum Thema (also Kernel nicht Asm grundsätzlich) noch insgesamt zuviel Hintergrundwissen fehlt.)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#17

Re: MBR auslesen

  Alt 2. Dez 2008, 08:34
Zitat von Cyf:
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.
Abgesehn davon isses eh schlecht da einfach so drin rumzuschreiben, denn zusätzlich umgeht man gleich mal die Windowscache und andere Stellen, wo Werte von Windows zwischengespeichert werden ... vorallem beim MBR, den Bootsektoren, den FATs/PartitionsBitmaps und dem Dateisystem(MFT/Verzeichnisstrukturen) ... also einfach so rumschreiben und das ohne Windows bescheidzusagen ist nicht gut/klug.
$2B or not $2B
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#18

Re: MBR auslesen

  Alt 2. Dez 2008, 16:28
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).
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: MBR auslesen

  Alt 2. Dez 2008, 16:39
Zitat von Cyf:
..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..
[OT]
Naja, aber aus der Zeit von Win 3.1 sind wir raus.
[/OT]
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#20

Re: MBR auslesen

  Alt 29. Mär 2009, 18:25
PChar('\\.\PHYSICALDRIVE0') :
Wie bekomme ich raus, was für andere Geräte am System angeschlossen sind ?

MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz