Checho's Blog

Talking about Windows Internals, Deployment and Troubleshooting

Artículos recientes

News and Awards

Follow me on Twitter and LinkedIn

@secalderonr

View Sergio Calderon's profile on LinkedIn

Recomendados

Tags

Community

Email Notifications

Archives

El icono de la función “Crear carpeta” en el menú contextual que no se encontraba, Process Monitor y su solución

De nuevo estamos por aquí, esta vez quiero compartirles un pequeño problema que tuve hace poco en un equipo con Windows 7 que, aunque no interfería en el funcionamiento normal, no podía dejar pasarlo.

El problema

Una de las tareas que uno más realiza en Windows, es utilizar el menú contextual que se despliega al hacer clic derecho con el mouse, el comportamiento de éste depende de donde estemos, es decir, una página web, una aplicación, etc.

Normalmente en Windows, se pueden realizar una serie de tareas predeterminadas y básicas que nos dan acceso rápido a características o a funciones.

En este caso, estaba tratando de crear una simple carpeta haciendo clic derecho en un espacio vacío, seleccionando Nuevo, y Carpeta.

No tenía problema para crear la carpeta, sin embargo siempre que trataba de escoger la opción, el icono de la función de “Carpeta” no era el que Windows trae de forma predeterminada:

ShellFolder1

Como ven, el icono era el de una hoja en blanco con unos pequeños signos encima, y no el de la carpeta en miniatura.

La causa

Comparar este con otro tipo de problemas que seguramente ustedes han visto, o que he escrito aquí, no sería la gran cosa, sin embargo, ¿Por qué aceptarlo si no debería funcionar así?

Cuando se pierden los iconos que identifican una aplicación o función, indica que hay un problema con su asociación, aunque en este caso tenía que investigar cuál era. Para esto, como siempre, corrí Process Monitor de Sysinternals y a continuación reproducí el comportamiento, es decir, crear una carpeta cualquiera.

Lo siguiente era llenarme de paciencia y empezar a buscar en la traza que arroja Process Monitor e intentar identificar qué era lo que causaba que Windows no encontrar el problema.

En principio busqué por “folder”, pero eran demasiados resultados y no pude acomodarme fácilmente, así que decidí empezar a buscar por “new” en separado, hasta que después de unos minutos, di con la clave que podría ayudarme a entender un poco más el inconveniente:

ShellFolder2

Windows estaba intentando hacer una consulta a la clave HKEY_CLASSES_ROOT\Folder\ShellNew\IconPath con un resultado de SUCCESS.

La razón por la que era importante esto a pesar de que diera exitoso el resultado, es que en HKEY_CLASSES_ROOT se alojan todas las asociaciones que administra el sistema operativo, aunque en HKEY_CURRENT_USER guarda gran parte por usuario.

Aquí además se estaba refiriendo específicamente a la de “Folder” por lo que estaba en la asociación correcta.

El valor IconPath referencia a la ruta interna dentro de Shell32.dll donde Windows puede extraer el icono necesario, pero al dar resultado exitoso descarté de que estuviera faltante o algo similar.

Lo que me llamó la atención, son las dos operaciones un poco ilógicas que intentaba hacer Windows después de hacer el Query al anterior valor, ambas utilizaban la función de CreateFile, la primera para intentar crear un directorio con nombre “Windowssystem32shell32.dll” y la segunda para intentar crear el archivo Shell32.dll dentro de la carpeta de C:\Windows. Ambos sin embargo, tenían un resultado de NAME NOT FOUND.

A primera vista, si se divide con el signo de Backslash (\) los directorios que intentaba crear Windows, existen realmente, es decir C:\Windows\System32\Shell32.dll, pero ¿Por qué sin los signos?

Decidí entonces seguir el comportamiento en un equipo que tuviera el icono de la carpeta asociado correctamente, y este fue el resultado en la misma clave y valor:

Working

También tiene SUCCESS, pero esta vez, inmediatamente hace la consulta en el valor de IconPath, utiliza la función de RegCloseKey para terminar la operación en la clave HKEY_CLASSES_ROOT\Folder\ShellNew.

¿Por qué en el sistema funcional no intentaba crear también estos directorios?

La respuesta la tenía Process Monitor por supuesto, desde la misma herramienta en la columna siguiente a Result “Detail”, se puede ver todos los detalles de la operación que se está haciendo, pero se puede ir mucho más a fondo si se hace clic derecho sobre la operación y se selecciona Properties, o bien con hacer doble clic que abre la misma ventana.

Casi todas las operaciones a nivel de Sistema de archivos o de Registro, manejan algun contenido, cuando son consultas por supuesto, tiene que hacer referencia al contenido que consultó, esto lo muestra en un campo llamado “Data”.

Para mi sorpresa, esto fue lo que vi y que me dio la respuesta al abrir las propiedades tanto de la operación en el sistema funcional, como en el que no mostraba el icono correctamente:

Sistema funcional:

Workone

Sistema NO funcional:

Badone

Data”, era la misma ruta en ambos, pero como ven, en el primero hacía referencia correctamente a la ruta, es decir a %SystemRoot%\System32\Shell32.dll,3, en cambio abajo trataba de buscar en el mismo directorio pero sin que estuviera separado por el backslash correctamente: %SystemRoot%system32shell32.dll,3

Si Windows no puede encontrar el directorio que está buscando, presentará los iconos (Si es de asociación) genéricos cuando no puede determinar el que le corresponde.

La solución

Sambiendo esto, desde Process Monitor utilicé la característica de “Jump to” para ir directamente a la clave de Registro implicada:

image

Hice doble clic en el valor IconPath y corregí correctamente la ruta de forma manual haciendo doble clic sobre ésta, es decir, de %SystemRoot%system32shell32.dll,3 a %SystemRoot%\system32\shell32.dll,3

Another

Cerré el Registro y después de unos segundos, hice nuevamente clic derecho para abrir el menú contextual, el item de Nuevo y para mi fortuna, ¡Mi icono estaba de vuelta!

image

Lo importante, a mi forma de ver, el solucionar un problema que aparentemente no es muy dañino, no sólo permitirá garantizar el nivel funcional como debe ser, sino lo más importante, siempre podremos aprender mucho del gran mundo de Windows con los detalles más mínimos y tal vez insignificantes.

Claro esta, con una herramienta igual de increible que Windows como lo es Process Monitor.

Saludos,

Checho

Posted: 5/1/2012 18:35 por Checho | con no comments
Comparte este post: