En la primera parte del artículo explicaré cómo funciona el controlador en modo núcleo de Restaurar Sistema: Sr.sys. Este controlador, presente en \WINDOWS\system32\drivers, se encarga básicamente de monitorizar los accesos de entrada y salida que se produzcan en el volumen. Lo hace interceptando llamadas de tipo IoCallDriver. El comportamiento del controlador Sr.sys viene determinado por el contenido de la clave de Registro HKEY_CLASSES_ROOT\SYSTEM\CurrentControlSet\Services\Sr\Parameters.
Inicialización del controlador
Al tratarse de un controlador de arranque, se inicializa en una etapa temprana de la carga de Windows. Nada más terminar de inicializarse, se "adhiere" a todos los volúmenes montados por el sistema operativo. Esta es la causa por la que, si dispone de un arranque dual con Windows Vista, observe que pierde todos los puntos de restauración si arranca Windows XP. Seguidamente, crea un directorio llamado "System Volume Information\_restore{GUID}" (si no existiera) en la raíz del disco. Lo crea de tipo oculto, de sistema y por defecto sólo le otorga permisos al usuario SYSTEM. En él se generan unos cuantos archivos, entre los que destacan:
- _driver.cfg: Contiene el número del punto de restauración actual, número de secuencia del LOG y otra información relacionada.
- _filelist.cfg: Este fichero es una copia del fichero Filelist.xml presente en el directorio %SystemRoot%\system32\restore\.
Básicamente monitoriza todo fichero "interesante". Por interesante se entiende lo siguiente:
- Que el archivo o carpeta no esté presente en la lista de exclusiones de _filelist.cfg.
- Que igualmente no esté incluido en una caché interna de Restaurar sistema.
Una vez que Sr.sys ha determinado que el fichero debe ser respaldado antes de proceder con la operación que se quiere realizar (por ejemplo, eliminarlo), crea una copia del mismo en el directorio System Volume Information\_restore{GUID}\RPX. La copia tiene la forma "AXXXXXXX.ext", donde "X" son números y "ext" es la extensión original del fichero. El subdirectorio Snapshot contiene copias del estado del Registro en el momento de la creación del punto de restauración. Los archivos guardados mantienen sus DACLs, atributos, streams, etc. y a la vez son comprimidos para evitar su fragmentación. Si por algún motivo los ACLs de algún fichero no cupieran en el correspondiente registro (que es de pocos KBs), se creará un fichero de la forma SXXXXXXX.acl y se incluirá una entrada en el LOG apuntando a dicho fichero.
El fichero Change.log
Este fichero es una parte extremadamente importante a la hora de restaurar el equipo de manera satisfactoria. Cuando se realiza una operación de entrada/salida "interesante", además de guardarse una copia del fichero en cuestión (como ya he comentado), se escribe en un fichero Change.log todos los detalles de la operación que se ha realizado. Nótese que, en el caso de que se hayan modificado directorios, no se realiza copia física de respaldo de los mismos, sólo se registra en Change.log la operación que se haya completado.
Para que este fichero sea manejable por el sistema operativo, el sistema lo divide en varios "trozos". Windows finaliza un trozo cuando ocurre alguno de estos eventos:
- Se ha apagado el equipo.
- Por algún motivo se ha deshabilitado el volumen en cuestión.
- Se ha desactivado Restaurar sistema en ese volumen.
- El archivo ocupa más de 1 MB de tamaño.
Esta es la funcionalidad básica del controlador de Restaurar sistema en modo núcleo, Sr.sys. En el siguiente artículo me detendré en la parte en modo usuario así como en lo que ocurre "por lo bajo" cuando el usuario pide restaurar su sistema a un punto anterior. Obviamente aclararé por qué ocurren las temidas "restauraciones incompletas", que impiden revertir de manera satisfactoria el estado del sistema.