Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 17
seoane Va por buen camino
Copiar el Master Boot Record (MBR)

El MBR (Master Boot Record) es un sector de 512 bytes al principio del disco duro que contiene la secuencia de comandos necesarios para cargar el SO y una tabla donde están definidas las particiones del disco duro.

Puede resultar útil guardar una copia de seguridad del mismo para casos de emergencia. Un simple disco de inicio y algún programa como RESTORRB, pueden sacarnos del apuro si tenemos guardada nuestra copia de seguridad.

Copiarlo es sencillo y seguro. Utilizaremos las funciones CreateFile y ReadFile para leer el primer sector del disco duro. Esta función copia el sector a un buffer, el parámetro Drive se refiere al disco duro, normalmente sera el 0.

Código Delphi [-]
function LeerMBR(Drive: Integer; Sector: Pointer): Boolean;
var
  hDisk: THandle;
  BytesRead: DWORD;
begin
  Result:= FALSE;
  hDisk:= CreateFile(PChar('\\.\Physicaldrive' + IntToStr(Drive)),GENERIC_READ,
    FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  if hDisk <> INVALID_HANDLE_VALUE then
  begin
    if ReadFile(hDisk,Sector^,512,BytesRead,nil) then
      Result:= BytesRead = 512
    else ShowMessage(SysErrorMessage(GetLastError));
    CloseHandle(hDisk);
  end else ShowMessage(SysErrorMessage(GetLastError));
end;

Utilizando la funcion anterior podemos crear una copia de seguridad lista para usar con el programa RESTORRB y un disco de inicio:

Código Delphi [-]
function GuardarMBR(Filename: String): Boolean;
var
  F: File;
  Buffer: Array[1..512] of Byte;
  Escritos: Integer;
begin
  Result:= TRUE;
  if LeerMBR(0,@Buffer) then
  begin
    AssignFile(F,Filename);
    {$I-}
      Rewrite(F,1);
    {$I+}
    if IOResult = 0 then
    begin
      BlockWrite(F,Buffer,Sizeof(Buffer),Escritos);
      Result:= Escritos = Sizeof(buffer);
      CloseFile(F);
    end;
  end;
end;


GuardarMBR('A:\rootboot.000');

Hasta aquí lo sensato y lo que funciona de forma probada, pero que pasaría si copiamos el MBR al primer sector de un disquete. Pues parece que el sistema arranca perfectamente desde el disquete, ahora bien no tengo forma de comprobar si la información de la particiones la toma del nuevo sector o la sigue obteniendo del viejo. La única forma de comprobarlo seria destrozando mi MBR y no pienso hacerlo, si alguien se anima ... Aquí dejo lo necesario para el trasplante de MBR.

Código Delphi [-]
function EscribirMBR(Letra: Char; Sector: Pointer): Boolean;
var
  hDisk: THandle;
  BytesWritten: DWORD;
begin
  Result:= FALSE;
  hDisk:= CreateFile(PChar('\\.\' + Letra + ':'),GENERIC_WRITE,FILE_SHARE_READ,
    nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if hDisk <> INVALID_HANDLE_VALUE then
  begin
    if WriteFile(hDisk,Sector^,512,BytesWritten,nil) then
      Result:= BytesWritten = 512
    else ShowMessage(SysErrorMessage(GetLastError));
    CloseHandle(hDisk);
  end else ShowMessage(SysErrorMessage(GetLastError));
end;


var
  Buffer: array[1..512] of Byte;
begin
  // Leemos el primer sector del primer disco duro
  if LeerMBR(0,@Buffer) then
    // Lo copiamos al primer sector del disquete A
    if EscribirMBR('A',@Buffer) then
      ShowMessage('El sector se ha copiado al disquete');
end;

Bueno, solo dejar una ultima advertencia. Copiar el MBR a un archivo es seguro y recomendable, copiarlo a un disquete es seguro pero de eficacia no probada e intentar escribir el MBR del disco duro es muy inseguro y no lo recomiendo.


Nota: RESTORRB forma parte del programa fips20, que se solía encontrar en casi todas las distribuciones linux como utilidad de particionado no destructivo para DOS.

http://www.tux.org/pub/dos/partition-programs/fips/fips-20/
Responder Con Cita
  #2  
Antiguo 31-08-2006
ArielMendoza ArielMendoza is offline
Registrado
 
Registrado: dic 2005
Posts: 5
Poder: 0
ArielMendoza Va por buen camino
Me parace un truco muy interesante. Intentare probar lo que dices.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 14:28:23.


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