La vie secrète de Windows

Jonction Dysfunction

Raymond Chen

Qu'est-ce qu'avec les jonctions ne semblent fonctionner ? Oh, ils fonctionnent tout droit - simplement pas la façon dont vous pensez.

Windows Vista et Windows 7 tirer parti d'une fonctionnalité système de fichiers appelée jonctions en incluant les jonctions de répertoires du système qui ont des noms hérités. Lorsque vous essayez d'accéder à ces dossiers à partir de Explorer ou la commande dir d'issuea, cependant, vous obtenez uniquement un accès refusé une erreur de . Clairement, Microsoft a créé les jonctions pour assurer la compatibilité avec les applications qui ne pas prises en compte les conseils de MSDN et au lieu de cela chemins codés en dur vers différents emplacements du système de fichiers connus. Pourquoi, puis, les jonctions inopérants lorsque vous essayez de les utiliser ?

En fait, ils fonctionnent pour leur objectif — mais l'objectif n'était pas l'accès de ligne de commande ou de navigation à partir de l'Explorateur. Pour savoir comment nous est parvenu dans cette situation, nous allons rembobiner l'horloge sur une décennie.

Aux débuts de Windows NT, telle qu'elle a été appelée, les profils utilisateur résidaient dans le répertoire C:\WINNT\Profiles. Et Oui, à l'époque WINNT était le nom par défaut pour le répertoire Windows. Au cours du développement de Windows 2000, les considérations relatives à la sécurité et les commentaires de clients d'entreprise invité les développeurs du système d'exploitation pour déplacer le répertoire de profils utilisateur du répertoire Windows afin que ce dernier de paramètres de sécurité pourrait être renforcé.

Avant la modification, le répertoire Windows, le répertoire plus important dans le système — avait cette Île d'insecurity au milieu. Les personnes qui souhaitaient pour appliquer la sécurité de nouveau, plus stricte à l'intégralité de l'annuaire devaient tiptoe autour du sous-répertoire de profils moins ils finissent accidentellement verrouiller tous les utilisateurs du système. Les profils du répertoire Windows le déplacement a résolu le problème.

Déplacement du dossier fourni une excellente opportunité pour attribuer un nom plus descriptif. Un des premiers choix était Documents & Settings , mais l'et commercial a provoqué un grand nombre de problèmes de compatibilité des applications. Par exemple, certains programmes interprété l'esperluette comme un marqueur de touche de raccourci accidentellement et entrainé jusqu'à afficher le répertoire sous la forme de documents _Settings (après la convention utilisée dans les menus et boîtes de dialogue, de soulignement de la touche d'accès rapide).

Windows 2000 réglées sur Documents and Settings, qui fourni un nom suffisamment descriptif pour le répertoire mais n'a pas pu prendre d'autres facteurs en compte. Pour un, l'espace incorporé créée en tapant le chemin d'accès plus lourde au besoin de constante à appliquer entre guillemets. En outre, la longueur du nom élevée a été un obstacle, en particulier parce qu'il Couper dans le

MAX_PATH

limite de noms de chemin d'accès Win32. Et que d'autres facteurs vous y êtes invité à réorganiser les divers répertoires système encore à nouveau dans Vista, l'équipe de Windows et la disposition reprend dans Windows 7.

Lorsque les répertoires déplacement la deuxième fois, Windows laissées jonctions pour aider les applications qui avaient des chemins d'accès codés en dur dans ces répertoires lorsqu'ils doivent avoir utilisé des fonctions telles que

SHGetFolderPath

et

GetProfilesDirectory

(ou, si vous êtes un type de script de personne, le

Shell.Application.NameSpace

méthode que nous l'avons vu dans le problème de novembre 2005).

Si une application tente d'accéder au fichier

C:\Documents and Settings\username\Start Démarrer\Programmes\Internet Explorer.lnk

les jonctions installées au

Documents and Settings

et au

Menu Démarrer

guide de l'appel vers le nouvel emplacement correct, qui est maintenant pour un profil local non itinérant

C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Démarrer\Programmes\Internet Explorer.lnk

Naturellement, ne devrait programmeurs pas coder en dur ce nouvel emplacement plus qu'ils doivent avoir codé en dur le — ils doivent utiliser les fonctions appropriées pour déterminer les emplacements de dossiers connus.

Bien entendu, une nouvelle opportunité peut créer un nouveau problème : Une application qui n'est pas familier avec jonctions peut rester bloquée dans une boucle infinie lorsqu'il tente d'effectuer un parcours de l'arborescence de répertoire récursive. Pour éviter cela, les jonctions de compatibilité autorisent le parcours des répertoires, mais refuser explicitement l' liste contenu autorisation : Si vous essayez d'accéder à ces dossiers à partir de Explorer ou l'invite de commande, vous obtiendrez une erreur accès refusé de .

Les liens symboliques compatibilité octroyer suffisamment pour atteindre leur objectif d'assurer la compatibilité des applications plus anciennes unwisely choisi pour les noms de répertoires de coder en dur. Mais ils ne fournissent pas suffisamment corde de laisser ces anciennes applications elles-mêmes causer des dommages sérieux. Blocage de contenu de la liste a également pour effet agréable de supprimer une nuisance attrayante pour les programmeurs de nouveau, qui peuvent être tentés de continuer la tradition de ces applications plus anciennes. Cette technique fonctionnera pour diriger des personnes dans la bonne direction ? Heure uniquement indiquera.

 

Raymond Chen Site Web de Raymnond The Old New Thing, et portant le même nom intitulée livre (Addison-Wesley, 2007) traitent Windows de l'historique de, programmation Win32 et soymilk salty.

Contenu connexe

La vie secrète de Windows : Codage n'est pas synonyme de chiffrement

La vie secrète de Windows : Noms de fichiers Windows « pétrifiés »

La vie secrète de Windows : Informations d'identification mises en cache