¿Por qué alguna carpeta tiene un icono de candado en Windows 7?
En un foro que frecuento a un usuario le aparecía un icono de candado sobre una de sus carpetas. Esta imagen detalla la situación:
Raymond Chen, de Microsoft, ya explicó en su blog en qué consiste el mencionado icono. En este artículo voy a completar un poco su explicación.
Ese icono es un icono de overlay registrado en la clave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\SharingPrivate e implementado en la DLL Ntshrui.dll.
Como comenté en un anterior artículo, el shell invoca al método IsMemberOf de los manejadores de iconos de overlay pasándoles como parámetro la ruta de un archivo o carpeta. Este método determina si se debe incluir un icono de overlay en ese fichero o carpeta o no. En primer lugar hay que comentar que un fichero o carpeta puede estar en tres estados con respecto a su estado de compartición:
- Compartido
- Privado
- No compartido
“No compartido” no es lo mismo que “Privado”, para el sistema es un estado diferente. Para que aparezca el susodicho candado deben cumplirse estos puntos:
- Debe tratarse de un archivo o carpeta no cifrado, ni con atributos de sistema u ocultos. Es decir, que tenga el atributo FILE_ATTRIBUTE_NORMAL.
- Su estado de compartición debe ser “privado”.
- El estado de compartición de la carpeta contenedora no debe ser “privado”.
El que el estado de compartición de un elemento sea “privado” puede ocurrir por diversos motivos. Y es esta diversidad la que yo creo que ha causado confusión entre algunos usuarios de Windows 7.
Una forma de hacer “privado” un elemento es la que comenta Raymond: desde el menú contextual, opción Compartir con, Nadie. Esta opción establece explícitamente el estado del fichero o carpeta como “Privado”, por lo que aparecerá el correspondiente candado, siempre y cuando la carpeta “padre” no esté en estado “Privado”.
Una carpeta puede estar compartida mediante SMB, protocolo explicado en esta página: http://samba.anu.edu.au/cifs/docs/what-is-smb.html, o bien compartida desde un perfil de usuario, siempre y cuando la directiva “Impedir que los usuarios compartan archivos dentro de su perfil” (Configuración del usuario\Plantillas administrativas\Componentes de Windows\Uso compartido de red) no esté habilitada. La clave está en que a la hora de determinar si una carpeta es “privada” se deben tener en cuenta también las entradas de permisos (ACE, Access Control Entries) aplicadas a esa carpeta. Si no hay ningún o solo hay una ACE que no sea de sistema y que tenga acceso sobre la carpeta, esta será considerada “privada”. Los ACE “de sistema” son el grupo Administradores, SYSTEM, TrustedInstaller, etc. Una carpeta es considerada “compartida” si algún usuario, excepto el propietario y el usuario que haya iniciado sesión, tiene permisos de acceso sobre la carpeta. Aquí nuevamente se excluyen las entradas de permisos de SYSTEM y Administradores que pudieran estar siendo heredados por el archivo o carpeta en cuestión.
Ciertamente todo el tema de permisos es algo complejo, pero espero que este artículo haya aclarado un poco las dudas de por qué Windows 7 pone un candado sobre ciertas carpetas del sistema.
Actualización (3 de junio de 2010): Acabo de ver que en Internet hay otros artículos que también tratan esta cuestión, como el blog del MVP Ramesh Srinivasan (en inglés): http://www.winhelponline.com/blog/lock-padlock-icon-files-folders-windows-7/