Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   necesito ayudacon este programa (https://www.clubdelphi.com/foros/showthread.php?t=46595)

xeelons 04-08-2007 00:23:22

necesito ayudacon este programa
 
hace uno meses enpece con delphi

tengo este codigo

pero no se que le puedo colocar en uses

Código:

var

  buf:array[0..511] of byte;
  c:char;
  j:word;
  r:register;
begin
  r.ax:=$0201;                      //Read Cyl 0, Hd 0, Sec
  r.cx:=2;
  r.dx:=$80;
  r.bx:=ofs(buf);
  r.es:=seg(buf);
  intr($13,r);
  write(buf[0],’ ’,buf[1],’:’);      // {display it}
  j:=2;
  while buf[j]<>0 do
    begin
      write(char(buf[j]));
      j:=j+1;
    end;
  writeln;
  write(’Do you want to erase the sector? ’);

end.


AzidRain 04-08-2007 01:11:44

Ese código que pones no es de Delphi propiamente dicho, es de Turbo Pascal, un poco viejo por cierto. Lo que haces en el código, leer un sector, al final preguntas pero no pones codigo para contestar, simplemente muestra el sector y ya.

Eso que pones es un procedimiento o mas bien un programa tipo "consola" y delphi por defecto no genera ese tipo de programas. Para ello hay que decirl explicitamente que vas a hacer una aplicacion de consola.

seoane 04-08-2007 01:50:25

Como ya te han dicho, ese código no creo que sea de delphi, de hecho no creo que funcione en windows, al menos no en Windows XP. Por suerte, no hace falta andar jugando con las interrupciones para leer el primer sector del disco.

Es así de sencillo:
Código:

uses
  SysUtils, Classes;

var
  Buffer: Array[1..512] of Char;
begin
  with TFileStream.Create('\\.\PhysicalDrive0',fmOpenRead or fmShareDenyNone) do
  try
    ReadBuffer(Buffer,Sizeof(Buffer));
    // Ahora tenemos el sector 0 (tambien conocido por MBR) en el buffer
  finally
    Free;
  end;
end.

Ahora la pregunta es que hacer con la información obtenida. Una buena opción es guardar el sector de arranque en un archivo, nunca viene mal tener una copia de seguridad.
Código:

var
  Buffer: Array[0..$1FF] of Byte;
begin
  with TFileStream.Create('\\.\PhysicalDrive0',fmOpenRead or fmShareDenyNone) do
  try
    ReadBuffer(Buffer,Sizeof(Buffer));
  finally
    Free;
  end;
  with TFileStream.Create('C:\mbr.bin',fmCreate) do
  try
    WriteBuffer(Buffer,Sizeof(Buffer));
  finally
    Free;
  end;
end.

O podemos intentar destripar algo de su contenido:
Código:

uses
  SysUtils, Classes;

var
  Buffer: Array[0..$1FF] of Byte;
  i: Integer;
begin
  Writeln;
  with TFileStream.Create('\\.\PhysicalDrive0',fmOpenRead or fmShareDenyNone) do
  try
    Writeln('Leyendo el el MBR ...');
    ReadBuffer(Buffer,Sizeof(Buffer));
    // Ahora lo destripamos un poco
    if (Buffer[$1FE] = $55) and (Buffer[$1FF] = $AA) then
      Writeln('El disco es "bootable"')
    else
      Writeln('El disco NO es "bootable"');
    for i:= 0 to 3 do
    begin
      if Buffer[$01BE + ($10 * i)] = $80 then
        Writeln(Format('La particion numero %d es "bootable"',[i]))
      else if Buffer[$01BE + ($10 * i)] = 0 then
        Writeln(Format('La particion numero %d NO es bootable',[i]))
      else
        Writeln(Format('La particion numero %d esta mal formada',[i]));
      // Para un windows el tipo es el 7
      Writeln(Format('La particion numero %d es del tipo: %d',[i,Buffer[$01C2 + ($10 * i)]]));
    end;
  finally
    Free;
  end;
end.

Y aun podríamos jugar algo más ... :)

eduarcol 04-08-2007 15:30:12

[quote = seoane]
Ahora la pregunta es que hacer con la información obtenida. Una buena opción es guardar el sector de arranque en un archivo, nunca viene mal tener una copia de seguridad.
[/quote]

Disculpen mi ignorancia, si guardo el sector de arranque es posible volver a restituirlo si se daña???????:confused:

seoane 04-08-2007 15:57:16

Cita:

Empezado por eduarcol
Disculpen mi ignorancia, si guardo el sector de arranque es posible volver a restituirlo si se daña???????:confused:

Desde windows lo veo difícil, ya que sin mbr no puedes iniciar windows :D

Pero una copia guardada se podría restaurar perfectamente, por ejemplo, desde un Live Cd de linux. Utilizando el comando dd
Código:

dd if=mbr.bin of=/dev/hda bs=512 count=1
mbr.bin = Archivo donde esta guardada la copia
/dev/hda = Primer disco duro (hdb para el segundo, etc ...)

Aunque si le tienes manía al linux, siempre podemos recurrir a los clásicos. Aquí cuento como copiar el mbr a un disquete de inicio y luego restaurarlo usando el programa RESTORRB:
http://www.clubdelphi.com/trucos/index.php?id=356

Por ultimo decir, que no hace mucho tuve que reinstalar windows en un equipo donde también tengo instalado linux. Como es sabido, el windows copia su propio mbr durante la instalación, impidiendo así que el linux pudiese volver a arrancar. Hay descritas muchas formas de reparar esto, pero una bastante sencilla es guardar una copia del mbr, instalar windows, y restaurar el mbr. Mas fácil y rápido imposible.

eduarcol 04-08-2007 15:59:59

Cita:

Empezado por seoane (Mensaje 220266)
Desde windows lo veo difícil, ya que sin mbr no puedes iniciar windows :D


Esa era mi duda, pero lo dicho eres el barbaro :D

Caral 04-08-2007 18:33:14

Hola
Perdonad mi atraso, pero despues de 18 horas sin conexion ya pude.
Gracias por vuestras respuestas he aprendido mucho, pero mucho de delphi, verdad que se llama asi?.
Que suerte que me hice entender con mi pregunta.
Que no funcione con windowns no es problema de todos modos no tengo ordenador.
Saluditos

egostar 04-08-2007 19:10:51

Cita:

Empezado por Caral (Mensaje 220281)
Hola
Perdonad mi atraso, pero despues de 18 horas sin conexion ya pude.
Gracias por vuestras respuestas he aprendido mucho, pero mucho de delphi, verdad que se llama asi?.
Que suerte que me hice entender con mi pregunta.
Que no funcione con windowns no es problema de todos modos no tengo ordenador.
Saluditos

:D:D, Ah que mi amigo Carlos, es usted bueno para las ironías.

Salud OS.


La franja horaria es GMT +2. Ahora son las 22:25:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi