PDA

Ver la Versión Completa : necesito ayudacon este programa


xeelons
04-08-2007, 00:23:22
hace uno meses enpece con delphi

tengo este codigo

pero no se que le puedo colocar en uses


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:

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.

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:

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
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.


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
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

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
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
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.