Confidencial de Windows

Unión Dysfunction

Raymond Chen

¿Qué es con esas uniones que no parecen funcionar? AH, funcionan bien - simplemente no al modo que piensa.

W indows Vista y Windows 7 aprovechar una característica del sistema de archivos conocida como uniones incluyendo uniones de directorios del sistema que tienen nombres heredados. Cuando intenta desplazarse a esas carpetas desde el explorador o el comando dir de issuea, sin embargo, sólo obtendrá un error de acceso denegado . Claramente, Microsoft creó las uniones de para proporcionar compatibilidad con aplicaciones que se descarta la orientación de MSDN y en su lugar rígida rutas de acceso a diversas ubicaciones del sistema de archivos conocido. ¿Por qué, a continuación, no las uniones de esas funcionan al intentar utilizarlas?

En realidad, funcionan para el propósito planteado, pero no era el propósito planteado exploración desde el explorador o de acceso de la línea de comandos. Para ver cómo hemos obtenido en esta situación, vamos a rebobinar el reloj acerca de una década.

En los comienzos de Windows NT, como se le llamó, perfiles de usuario residían en el directorio c:\Winnt\Perfiles. Y Sí, volver a continuación, el nombre predeterminado para el directorio de Windows era WINNT. Durante el desarrollo de Windows 2000, los comentarios de los clientes corporativos y consideraciones de seguridad le pedirá los programadores del sistema operativo para mover el directorio de perfiles de usuario fuera del directorio Windows para que el último de la configuración de seguridad podría ser mejorado.

Antes del cambio, el directorio de Windows, el directorio más importante del sistema: tenía este Isla de inseguridad en el medio. Las personas que deseaban aplicar seguridad nuevo, más estricta a todo el directorio tenían que tiptoe alrededor del subdirectorio de perfiles para evitar que acaban accidentalmente bloquear todos los usuarios del sistema. Mover los perfiles del directorio de la Windows resolvió el problema.

Reubicar la carpeta proporciona una excelente oportunidad para cambiarle el nombre por algo más descriptivo. Una de las opciones de tiempo de compilación fue de Documentos y configuración, pero la y comercial provocó un gran número de problemas de compatibilidad de aplicaciones. Por ejemplo, algunos programas interpretan la y comercial como un marcador de acelerador de teclado accidentalmente y repartido hasta mostrar el directorio como de documentos _Settings (siguiendo la convención, usada en menús y cuadros de diálogo, de subrayando la tecla de aceleración).

Windows 2000 se liquidan en Documents and Settings , que proporciona un nombre descriptivo razonablemente para el directorio pero no se pudo tener en cuenta otros factores. Para que uno, el espacio incrustado realiza escribiendo la ruta de acceso más laborioso debido a la constante necesidad de aplicar las comillas de. Además, la longitud del nombre de la enorme fue un obstáculo, especialmente porque lo corte en la

MAX_PATH

límite de nombres de ruta de acceso de Win32. Estos y otros factores se le pida el equipo de Windows para reorganizar los diversos directorios de sistema todavía nuevo en vista y lleva la disposición hacia delante en Windows 7.

Cuando los directorios se mueven la segunda vez, Windows dejados uniones de ayudar a las aplicaciones que tenían rígida rutas de acceso a estos directorios cuando deberían utilizar funciones como

SHGetFolderPath

y

GetProfilesDirectory

(o, si es un tipo de secuencias de comandos de persona, el

Shell.Application.NameSpace

método vimos volver en el problema de noviembre de 2005).

Si una aplicación intenta tener acceso al archivo

C:\Documents and Settings\username\Start Inicio\Programas\Internet Explorer.lnk

las uniones de instalado en

Documentos y configuraciones

y en

Menú Inicio

le guiará a la llamada a la nueva ubicación correcta, que ahora es para un perfil local no móvil

C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Inicio\Programas\Internet Explorer.lnk

Naturalmente, no programadores deben codificar esta nueva ubicación cualquier más de lo que deberían haber codificado antiguo, deben utilizar las funciones adecuadas para determinar las ubicaciones de carpetas bien conocidas.

Por supuesto, una nueva oportunidad puede crear un nuevo problema: Una aplicación que no está familiarizada con las uniones puede quedarse en un bucle infinito cuando intenta realizar un recorrido del árbol de directorios recursiva. Para evitar esto, las uniones de compatibilidad permiten transversal de directorio, pero deniegan explícitamente Mostrar contenido permiso: Si intenta desplazarse a estas carpetas desde el explorador o el símbolo del sistema, obtendrá un error de acceso denegado .

Los vínculos simbólicos compatibilidad concedan acceso suficiente para lograr su objetivo de ofrecer compatibilidad para las aplicaciones más antiguas que decidió unwisely nombres de directorio de disco duro de código. Pero que no suministra suficiente cuerda para permitir que estas aplicaciones anteriores a sí mismos causar daños graves. Bloqueo de Mostrar contenido de también tiene el efecto secundario agradable de quitar una molestia atractiva para los programadores nuevos, que pueden verse tentados a continuar la tradición de esas aplicaciones antiguas. ¿Esta técnica funcionará para dirigir las personas en la dirección correcta? Indicará la única vez.

 

Raymond Chen Sitio Web del Raymnond, El Old New Thing, y Libreta de forma idéntica con título (Addison-Wesley, 2007) tratan con historial de Windows, programación de Win32 y soymilk salty.

Contenido relacionado

Confidencial de Windows: Codificar no es cifrar

Confidencial de Windows: Nombres de archivo de Windows “adornados”

Confidencial de Windows: Credenciales almacenadas en la caché