Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 04-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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 ...

Última edición por seoane fecha: 04-08-2007 a las 02:23:28.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Probad este programa para visualizar vuestros archivos con extensión 3ds kakarotv5 Gráficos 0 26-02-2007 14:26:57
Necesito interbase para un programa con interbase David Conexión con bases de datos 2 20-04-2006 00:23:55
Hola Es mi primer mensaje en este Foro y necesito ayuda para archivos XML Juan_Carlos_P Gráficos 2 08-08-2005 19:11:17
Como realizo este programa? Neo Varios 0 09-06-2003 18:08:55


La franja horaria es GMT +2. Ahora son las 12:23:06.


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
Copyright 1996-2007 Club Delphi