| Nota |
| Las correcciones de los problemas que se enumeran a continuación no pueden ser publicadas en forma de un archivo modificado o instalador, pues así se violaría el punto cuarto "LIMITACIONES EN MATERIA DE INGENIERÍA INVERSA, DESCOMPILACIÓN Y DESENSAMBLAJE." y el punto seis "SEPARACIÓN DE COMPONENTES." del acuerdo de licencia del sistema operativo Windows, aceptado al momento de la instalación. Sin embargo, mi idea es mostrar las formas en que podrían ser reparadas, en forma de conocimiento computacional general. |
En general, este documento tiene muchos aspectos relacionados con el documento titulado Al cambiar la extensión: ¿el archivo queda inutilizable?. Puede considerar ese documento para consultar detalles de los procedimientos señalados en el documento actual.
1. Primero lo primero
Lo principal es encontrar el archivo que produce el comportamiento indeseado. Podemos notar que la limitante de que no pueda colocarse un punto al comienzo del nombre de un archivo o carpeta es simplemente una limitante de la interfaz de usuario y no de Windows pues desde la consola de comandos todo funciona normalmente como debería:

Sin embargo, con solo renombrar el archivo directamente desde la interfaz de ventanas de Windows (explorer.exe) obtenemos el siguiente error:

Como vimos en un tutorial anterior, el cambio de nombre de archivos y carpetas es delegado a shell32.dll. Aunque esta librería proporciona acceso al sistema de ficheros solamente, ella misma no es la encargada de trabajar con el sistema de archivos del disco.
2. Dentro de la librería
Buscando dentro de la librería las instrucciones que producen el comportamiento indeseado utilizando W32Dasm, encontramos la siguiente secuencia:

Aunque hay una comparación antes del mensaje, si vemos la parte superior se hace referencia a dos direcciones de donde podría provenir la llamada a este código. Estas dos direcciones deben ser las dos condiciones que puede gatillar el mensaje las cuales probablemente deben ser "escribió un punto al comienzo del archivo" y "no escribió nada como nombre".
Revisemos las llamadas en busca de la comprobación al respecto de cuando "escribió un punto al comienzo del archivo" pues modificar el salto antes de la pregunta probablemente afecte a las dos condiciones y esto no es lo que deseamos.
3. Analizando el comportamiento
En la segunda llamada podemos ver el siguiente codigo en OllyDbg:

Añadí algunos comentarios al código (en la última columna de la imagen) para facilitar la comprensión del código.
Si razonamos unos segundos, la comparación
Entonces, si el primer caractes es un punto el salto
4. Modificando el comportamiento
Si la comparación
Todo esto asumiendo que la función
De esta forma, el código resultante, luego de la modificación sería similar a:

5. Aplicando los cambios al sistema
Ahora reemplazamos el archivo utilizando alguna utilidad como ERD Commander 2005, y posteriormente, reiniciamos el equipo de manera normal:


6. ¿Trabajo terminado?
Finalmente comprobamos el funcionamiento de los cambios realizados a la librería shell32.dll:

Una nueva modificación realizada correctamente a nuestro sistema, todo con el fin de lograr la mayor comodidad posible al usar nuestro equipo.
7. Conclusiones
De una forma relativamente simple, logramos modificar el comportamiento bases del sistema, sin influir en su estabilidad.
Una consideración importante es que la versión utilizada en este artículo fue Windows XP Home SP2. Las direcciones internas de los archivos como las librerías y otros archivos del sistema cambian entre las versiones Home y Professional, al igual que en las con o sin SP2, SP1 y también otras versiones basadas en el nucleo de Windows NT, como Windows 2000 o Windows 2003. Aunque las modificaciones pueden aplicarse de igual forma, pero las referencias no serán iguales.
Debo añadir que en las versiones beta de Windows Vista que he probado, esta limitación se eliminó, por lo que hacer este procedimiento probablemente no sea necesario en un futuro próximo.

