jueves, marzo 01, 2007

Cómo funciona Restaurar sistema [Parte II]

En la primera parte del artículo ya comenté cómo funciona el controlador de Restaurar sistema, qué información almacena y cómo la almacena. En esta segunda parte, me centraré en la parte más gráfica de Restaurar sistema así como en el proceso de restauración en sí. La mayoría de problemas con esta herramienta se concentran en este ámbito.

Cuando el usuario abre el panel Propiedades de sistema, en primer lugar se carga la DLL Srclient.dll. El código de la misma decidirá si crear la correspondiente pestaña "Restaurar sistema" y qué opciones activar y cuáles no. Si el usuario goza de los privilegios necesarios para restaurar el sistema, Windows examinará si se ha establecido una política que desactiva Restaurar sistema.


Problema 1: No aparece la pestaña Restaurar sistema en Propiedades de sistema.

¿El usuario tiene privilegios necesarios para restaurar el sistema? Si los tuviera, observe si está presente la siguiente directiva en el Registro: Clave HKLM\Software\Policies\Microsoft\Windows NT\System Restore, valor "DisableSR", contenido "1". Elimínela si fuera así.



Finalmente, Windows enumera las unidades de disco, examina si están aplicadas otras directivas y observa si la herramienta está activada o desactivada para generar un contenido de la pestaña apropiado (una o varias unidades de disco, opciones desactivadas, etc.).

La herramienta Restaurar sistema

Al abrir la herramienta Restaurar sistema, se ejecuta el fichero Rstrui.exe del directorio %SystemRoot%\system32\restore\. En primera instancia se observa si el servicio "Servicio de restauración del sistema" está iniciado. Si no fuera así, se le intenta establecer un tipo de inicio automático e iniciarlo.


Problema 2: Al abrir Restaurar sistema aparece el siguiente mensaje de error: Restaurar sistema no puede proteger su equipo. Reinicie el equipo y vuelva a ejecutar Restaurar sistema.

Abra una ventana de comandos (Cmd.exe) y teclee lo siguiente:

sc queryex Srservice

Observe el estado del servicio y su código de salida. Al tratarse de un error Win32, puede saber qué significa cada código hexadecimal buscándolo en el fichero Winerror.h del Platform SDK de Windows XP.

Si la información de Registro o archivos encargados de implementar el servicio estuviesen dañados, podría reinstalar Restaurar sistema (Síntoma 1, Método 2 de este artículo: http://www.fermu.com/content/view/249/2/lang,es/).


A continuación, tras pasar de la pantalla inicial, se muestra un calendario para que el usuario elija un punto de restauración. Al confirmar la operación de restauración, comienza un proceso algo complejo que merece un apartado para él solo.

Restaurando el sistema

Una vez que el usuario hace clic sobre Siguiente para iniciar la restauración, se realizan una serie de pasos que generan un "entorno de restauración". Concretamente es la función InitiateRestore contenida en el fichero Srrstr.dll la encargada de realizarlos.

  1. Se crea un valor *Restore en la clave de Registro HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce. Este valor apunta al ejecutable Rstrui.exe y sirve para que se muestre la ventana informativa de Restaurar sistema tras el reinicio del sistema.
  2. Se crea un valor DWORD de nombre RestoreStatus con contenido 2. Este valor sirve para que otras aplicaciones sepan que se está produciendo una restauración.
  3. Automáticamente se crea un nuevo punto de restauración que será utilizado en caso de que la restauración falle o el usuario quiera deshacer los cambios realizados. El punto creado es de tipo nested, lo que quiere decir que ninguna otra aplicación puede crear otro punto en ese periodo de tiempo.
  4. Se crea un valor RestoreInProgress con contenido 1 en la clave HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore. Este valor lo leerá Winlogon y así sabrá que debe proceder con una restauración del sistema.
  5. Una vez que Winlogon determina que debe realizar una restauración, se reanuda la misma.

La funcion no documentada ResumeRestore de la DLL Srrstr.dll es la que realiza la restauración en sí y es llamada por Winlogon. Ésta consta de tres partes:

  • Preparar la restauración.
  • Restaurar archivos y directorios.
  • Grabar la instantánea del Registro y manipularla ligeramente.

Cada una de estas fases se corresponde con un porcentaje de la barra de progreso que aparecerá en pantalla: "Preparar la restauración" se realiza en el punto 0%, "restaurar archivos y directorios" en el 20% y "grabar la instantánea de Registro" en el 90%.

Preparar la restauración

En esta fase se crea un mapa de restauración a partir del archivo de cambios (Changelog). Entiéndase un mapa de restauración como una entidad abstracta que sirve para "dirigir" el proceso de restauración. Cada operación de creado de archivos, borrado, renombrado, etc. tiene su correspondiente entrada en el mapa. Esta operación dura relativamente poco tiempo.

Restaurar archivos y directorios

Esta fase se ve precedida por una "precarga" de la instantánea del Registro almacenada en el punto de restauración. Se hace esta "precarga" para asegurarse de que después no haya problemas de espacio en disco. Si hay menos de 60 MB libres, se realiza una operación FIFO para tratar de liberar espacio. Esto se realiza un par de veces, si fuera necesario. Si durante la restauración el sistema no contara con el espacio en disco necesario, la restauración no se puede completar, se registra el error, se deshacen los cambios realizados y el valor RestoreDiskSpaceError de la clave HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore almacenará un 112 decimal, error Win32 que significa ERROR_DISK_FULL.

Seguidamente se restaura el sistema realizando operaciones inversas a partir del mapa de restauración: Es decir, si se realizó una operación que añade un directorio, al restaurar deberá eliminarse dicho directorio, y así similarmente con las demás operaciones. En este momento es casi inevitable que surjan pequeños problemas, algunos se ignoran y otros, como si hubiera archivos en uso, se tratarán adecuadamente después. Las principales operaciones que generan un "Failed" (único resultado que detiene una restauración) son las siguientes:

  • Al renombrar un directorio, si el directorio origen no existe o la función MoveFile devuelve un error por cualquier motivo.
  • Al crear un directorio, si la función CreateDirectory devuelve algún error.
  • Al eliminar un directorio, si la función RemoveDirectory devuelve algún error.
  • Al modificar un archivo, si una función no documentada de Restaurar sistema devuelve un error.

Si durante la restauración aparecen dos archivos o directorios con el mismo nombre, se produce lo que se denomina una colisión. Restaurar sistema resuelve la colisión renombrando el archivo o carpeta afectado añadiéndole un "(n)" al final, donde "n" es un número comprendido entre 2 y 1000. Si por cualquier motivo no pudiera encontrar un nombre alternativo, la restauración falla pues el sistema quedaría en estado inconsistente si se obviara la operación que ha resultado en la colisión.

Si se produce cualquier error durante la restauración, debe restaurarse el sistema empleando para ello el punto de restauración que se creó al principio de la misma. Para deshacer una restauración se utiliza el mismo procedimiento que el que realiza la restauración, sólo que esta vez deben realizarse las operaciones en orden inverso.

Grabar la instantánea del Registro y manipularla ligeramente

En primer lugar se trata la rama Software: Se añade el valor *Restore a la clave RunOnce (como ya comenté), se añade un valor DWORD SfcScan con contenido 2 en la clave HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon para que se analice la integridad de los archivos del sistema. Seguidamente se restauran las claves de dicha rama, con algunas obvias excepciones:

  • La información sobre Asistencia remota no se restaura.
  • La información del Asesor de contenido de Internet Explorer.
  • La base de datos LSA.

A continuación se trata la rama SYSTEM. Las excepciones más notables son:

  • La información sobre la activación de Windows (WPA).
  • La información sobre la zona horaria.
  • La asignación interna de letras de unidades.

Por último se trata la rama SAM (Security Account Manager).


Los archivos, carpetas y claves de Registro que no se restaurarán se definen en las claves de Registro HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToBackup y HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\KeysNotToRestore.



También se restaura toda la información COM, los contadores de rendimiento, base de datos WMI y IIS (si procede).

Parte final. Mostrar la pantalla de información

El último punto del proceso consiste en mostrar la pantalla con la información sobre la restauración (si tuvo éxito o si no y por qué). Esta información la muestra el fichero Rstrui.exe cuando es llamado con unos parámetros internos y no documentados.

Cuando se produce una restauración "normal", esto es, no silenciosa, se anota en el Registro que debe ejecutarse el comando %SystemRoot%\system32\restore\rstrui.exe -c tan pronto como un administrador inicie sesión en el equipo. El parámetro -c, de "check", analiza el fichero %SystemRoot%\system32\restore\Rstrlog.dat para determinar si la restauración falló, o si se realizó correctamente. En caso de fallo, se llamará a rstrui.exe -result:f. Este parámetro hace que Restaurar sistema informe de si se trató de un error por falta de espacio en disco o de un error inespecífico. Lo determina leyendo el contenido de la clave HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore.

Así es como funciona internamente Restaurar sistema. Si hubiera algún punto importante que me hubiera olvidado de comentar o si tuviera alguna duda, puede utilizar la sección de comentarios de la entrada y trataré de contestar todas las preguntas (si sé la respuesta, claro). Si fuese un problema técnico con Restaurar sistema, es mejor que formule su pregunta en alguna de las comunidades que existen en Internet sobre Windows.

13 comentarios:

Anónimo dijo...

¡FELICIDADES.. EXCELENTE!

Anónimo dijo...

Hola, he instalado el antivirus avast y al reiniciar el sistema se ha realizado un escaneo, ha eliminado algunos archivos que contenian virus, entre ellos, supongo que algunos pertenecian a restaurar sistema, porque ahora me he quedado sin puntos de restauración.

Anónimo dijo...

como puedo saber el nombre de los archivos pertenecientes a los puntos de restauración del sistema eliminó...

Daniel Martín dijo...

> como puedo saber el nombre de los archivos pertenecientes a los puntos de restauración del sistema eliminó...

No entiendo muy bien a qué te refieres. ¿Podrías precisar algo más tu pregunta?

Anónimo dijo...

hola, no me aparece la pestaña sytem restore, antes aparecia, pero la desactive paralimpiar un virus luego la active, cuando volvi a necesitarla no aparece mas, el tema que cuando llego en el registro a _windows nt,no m da la opcion de system restore.
Teno XP homeedition SP2.
Gracias

Francisco dijo...

urgente>
tengo un problema, al encerder la PC, aparece el boot normal, luego
aparece normal la pantalla de bienvenida, luego(aqui esta elproblema)al aparecer la siguiente ventana ya no carga nada solo aparece la flechita y no carga,por favor alguien sabe como solucionar este problema.
mi correo es djchicopuac@gmail.com

Anónimo dijo...

Hola tengo un problema con las restauración de sistema el caso eske ara cosa de mes y medio me la encontre desactivada y la volvi a activar me creo un punto automaticamente pero desde entonce no me crea mas puntos de control, automaticamente los tengo ke hacer yo con lo de crear punto de restauración como puedo arreglarlo.

Anónimo dijo...

puedo restaurar el sistema sin tener puntos de control o algo haci existe algun programa que aga esto

Anónimo dijo...

necesito información sobre windows nt, e/s = Plug and play, Configuracion de controladores de manera manual, Composición y funciones del manejador de dispositivos, Software INDEPENDIENTE del dispositivo. ¿cómo funciona en "su" S.O.?, Planificación de disco. (Algoritmo/política de planificación usada) y explicación del mismo, Fiabilidad y tolerancia a fallos: qué técnica utiliza el S.O.?
Memoria = Administracion de memoria, Memoria virtual (modo de trabajo) características - tamaño, Forma de contabilizacion de memoria (forma elegida y descripcion), Uso de Paginacion o segmentacion?, tamaño de páginas (estándar), fallos de página, tablas de página - 1 nivel - Multinivel, Algoritmo de sustitucion de páginas. y descripcion del mismo, Conjunto de trabajo (sustitucion local vs. grlobal)

Anónimo dijo...

Hola necesito ayuda kiza les parezca tonto pero elimine el windows movie maker q habia bajado x primera vez y ahora al kererlo volver a bajar no me los instala. Probe bajarlo d ares, d paginas web, el problema es q no lo instala, sera q elimine algun componente importante d windows? como lo soluciono? mi e-mail es arual188@yahoo.com.ar

Anónimo dijo...

Buenos dias,me podriais decir cuanto tiempo tarda windows vista en restaurar el sistema?
Lo digo porque lleva mas de una hora con la pantalla en espera. Gracias

Anónimo dijo...

El link del metodo 1 en la pagina

http://www.fermu.com/content/view/249/2/lang,es/

está dañado, si pudiesen incluirlo por aqui seria genial.
Saludos

Pepe Romero dijo...

¡Felicidades por tu artículo, Daniel!
Acabo de descubrir tu blog y me encanta.
No sé si leerás este comentario, puesto que tu artículo es bastante antiguo.
Por si acaso, quisiera pedirte ayuda para resolver un problema:
En mi Windows XP SP3, el sistema no me permite discriminar cuáles son las unidades sobre las que quiero activar "Restaurar Sistema". Me explico: quiero activar tan sólo la unidad C y desactivar las demás. En esto parece no haber ningún problema cuando lo aplico; mas, pasado un tiempo, vuelvo a revisar la configuración y me encuentro conque todas están activadas de nuevo. ¿Sabrías alguna forma de solucionar esto?