AGB  ·  Datenschutz  ·  Impressum  







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

Sektoren von der Festplatte lesen

Offene Frage von "FProg"
Ein Thema von FProg · begonnen am 27. Mär 2005 · letzter Beitrag vom 27. Mär 2005
Antwort Antwort
FProg

Registriert seit: 27. Dez 2003
Ort: Gera
3 Beiträge
 
Delphi 5 Standard
 
#1

Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 20:29
Hi,

ich bin gerade dabei mich mit etwas... naja, "tiefgreifenderen" Dingen zu beschäftigen und versuche, Sektoren direkt von der Festplatte zu lesen. Leider habe ich dazu nur etwas eingestaubten TP-Code gefunden, den ich nicht in Delphi übersetzt bekomme

Ich kann ihn ja trotzdem mal posten.

Delphi-Quellcode:
function bios_ReadAbsSector(drv, head: byte; cyl: word; sector: byte; var
buffer): byte;
var regs: TRegisters;
begin
    regs.ah:=02;
    regs.dl:=drv;
    regs.dh:=head;
    regs.ch:=cyl and $ff;
    regs.cl:=(sector and $3f) or ((cyl and $300) shr 2);
    regs.al:=1;
    regs.es:=seg(buffer);
    regs.bx:=ofs(buffer);
    intr($13,regs);
    if (regs.flags and $01)=0 then begin
        bios_ReadAbsSector:=0;
    end else begin
        bios_ReadAbsSector:=regs.ah;
    end;
end;
Gefunden auf http://www.elists.org/pipermail/delp...er/016753.html

Es werden also die unterschiedlichsten Register belegt. Theoretisch ließe sich ja dieser Quelltext ja mit Delphi umsetzen, nur hängt es bei mir an zwei Stellen...
  • Wie bekomme ich die Befehle seg() und ofs() umgesetzt?
  • Wie ermittle ich die Werte, die hier so schön in regs.flags enthalten sind?

Hier nochmal der Delphi-Quelltext, soweit ich ihn habe:

Delphi-Quellcode:
function bios_ReadAbsSector(drv, head: byte; cyl: word; sector: byte; var
buffer): byte;
var b, bCyl: byte;
begin
    bCyl := cyl and $ff;
    b := (sector and $3f) or ((cyl and $300) shr 2);
    asm
        mov ah, 02
        mov dl, drv
        mov dh, head
        mov ch, bCyl
        mov cl, b
        mov al, 1
        mov es, {???}
        mov bx, {???}
        int 19
        {???}
    end;
    {???}
end;

Vielen dank schonmal!
FProg
Felix Neumann
  Mit Zitat antworten Zitat
stefan2005

Registriert seit: 30. Sep 2003
Ort: Puchheim
250 Beiträge
 
Delphi 6 Personal
 
#2

Re: Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 20:59
hi,
soweit ich sehe, benutzt du den Bios Interrupt 13h (19 in dezimal) !
Bios Interrupts können nur im 16-Bit Mode ausgeführt werden (in MS-DOS z.B. oder auch im V86-Mode von Windows,so wie 16-Bit Turbo Pascal Programme emuliert werden) !
Da Delphi aber 32-Bit Code erstellt, dürfte dies leider nicht funktionieren !

cu,
stefan2005
  Mit Zitat antworten Zitat
FProg

Registriert seit: 27. Dez 2003
Ort: Gera
3 Beiträge
 
Delphi 5 Standard
 
#3

Re: Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 21:11
Zitat von stefan2005:
soweit ich sehe, benutzt du den Bios Interrupt 13h (19 in dezimal) !
Bios Interrupts können nur im 16-Bit Mode ausgeführt werden (in MS-DOS z.B. oder auch im V86-Mode von Windows,so wie 16-Bit Turbo Pascal Programme emuliert werden) !
Da Delphi aber 32-Bit Code erstellt, dürfte dies leider nicht funktionieren !
Oh... vielen Dank! Weiß jemand ob es sonst Möglichkeiten gibt, Sektoren auszulesen?

Viele Grüße
FProg
Felix Neumann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 21:32
Jupp: DiskImageNT: http://www.luckie-online.de/programme/DiskImageNT/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
FProg

Registriert seit: 27. Dez 2003
Ort: Gera
3 Beiträge
 
Delphi 5 Standard
 
#5

Re: Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 21:48
Zitat von Luckie:
Vielen Dank, ich habe mir den Quelltext einmal angesehen. Die DeviceIoControl, die darin verwendet wird, ist schonmal sehr gut zu gebrauchen Leider wird das Laufwerk über CreateFile ausgelesen, was nur unter NT-basierten Betriebssystemen funktioniert - ich bräuchte den Code für WinME...

Noch jemand eine Idee?


Viele Grüße
FProg
Felix Neumann
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#6

Re: Sektoren von der Festplatte lesen

  Alt 27. Mär 2005, 22:50
Er schreibt ja selber:
Zitat:
I used this just under plain DOS. I have no clue, if it would work under
Win95 or up, but I guess it would work when booting to the command prompt
but most likely not when booting the GUI.
Die Windows-CMD läuft afaik noch unter 16-Bit. Wenn du also ein Programm dafür schreibst in Assembler schreibst, dass den per paramter übergeben Sektor aus der HDD liest und per Message an das Hauptprogramm übergibt, sollte das Problem auch gelöst sein.

Gruß
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:03 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