¿Por qué Windows Registry Editor Version 5.00 y no REGEDIT5?

En Internet es común encontrarnos con ficheros .reg que contienen datos que se pueden importar en el registro del sistema operativo. Si nos fijamos en la cabecera de estos ficheros .reg, nos podemos encontrar con dos tipos diferentes:

REGEDIT4

Windows Registry Editor Version 5.00

Existe un tercer tipo que quizá no haya visto nunca, REGEDIT, que se corresponde con ficheros de registro para Windows 3.1, sistema operativo en el que apareció la primera versión de lo que conocemos como registro. Que recuerde, en esa primera versión solamente existía la raíz HKEY_CLASSES_ROOT.

¿Cuál es la diferencia entre ambas cabeceras? La respuesta a esta pregunta da pie a un breve artículo sobre la historia de Windows, particularmente de Editor del Registro.

En los inicios de Windows, Editor del Registro no soportaba todos los tipos de valores que soporta hoy en día. Entre otros, no entendía de forma nativa valores de tipo cadena expandible (REG_EXPAND_SZ). Por este motivo, estos valores debían ser exportados a un fichero de texto de forma “cruda”, es decir, como una cadena ANSI de valores hexadecimales, terminada por un carácter nulo. He aquí un ejemplo. Al exportar una clave de registro que contiene un valor de tipo cadena expandible queda algo como esto:

REGEDIT4

[HKEY_CURRENT_USER\Prueba]
"Prueba"=hex(2):25,53,79,73,74,65,6d,52,6f,6f,74,25,00

Cuando nació Windows 2000, la compatibilidad con Unicode hizo que Editor del Registro exportara ficheros de registro de una forma un tanto diferente. Ahora los valores de cadena expandible no eran exportados como flujos hexadecimales en formato ANSI, sino Unicode, y la misma clave de registro quedaría exportada de la siguiente forma:

REGEDIT4

[HKEY_CURRENT_USER\Prueba]
"Prueba"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
  00,25,00,00,00

El caos que se formó fue importante, porque de pronto Editor del Registro podría dejar de importar correctamente millones de archivos de registro.

El primer intento de solución por parte de Microsoft fue el de crear una nueva cabecera para los archivos de registro, la versión 5, REGEDIT5. El problema que tiene esta cabecera es que tampoco era interpretada correctamente porque el parser de Editor del Registro no tenía en cuenta correctamente el número de versión. Si lo que viene después de “REGEDIT” es un número 4, entonces interpreta que se trata de un archivo de registro de tipo Windows 9x. Si no, interpreta que se trata de un fichero de registro de tipo Windows 3.1. ¡Desde Microsoft no pensaban que Editor del Registro fuese a necesitar una nueva versión!

Así pues, la única solución posible fue reescribir completamente la cabecera, y aprovechando la experiencia adquirida, hacerla más robusta ante futuras versiones de Editor del Registro. La nueva cabecera resultante quedó como “Windows Registry Editor Version 5.00” y ahora el parser sí interpreta correctamente que se trata de la versión 5.00. Si en un futuro Microsoft desarrollara una versión posterior, los editores antiguos descartarán adecuadamente el fichero en vez de importarlo. Las versiones recientes de Editor del Registro pueden importar archivos de registro de tipo Windows 9x y Windows 3.1. También ofrecen la posibilidad de exportar archivos de registro en formato de cadena ANSI para garantizar su compatibilidad con sistemas Windows 9x. Para ello basta con seleccionar la correspondiente opción Archivos de Registro de Win9x/NT4 (REGEDIT4) en la lista desplegable Tipo del cuadro de diálogo Exportar.

Leave a Reply

Your email address will not be published. Required fields are marked *