Windows Confidential

Giunzione Dysfunction

Raymond Chen

Che cos'è con tali congiunzioni non sembrano funzionare? Oh, per poter utilizzare tutto a destra - semplicemente non il modo in cui che si ritiene.

Windows Vista e Windows 7 sfruttare una funzionalità del file system nota come congiunzioni includendo giunzioni di directory di sistema che hanno nomi legacy. Quando si tenta di accedere a tali cartelle da Explorer o il comando dir issuea, tuttavia, è sufficiente ottenere un errore di accesso negato. Chiaramente, Microsoft ha creato congiunzioni per assicurare la compatibilità con le applicazioni che vengono ignorate le indicazioni di MSDN e invece percorsi hard-coded per vari percorsi di sistema di file conosciuti. Perché, quindi, non quelle congiunzioni funzionano quando si tenta di utilizzarli?

In realtà, essi funzionano per loro scopo previsto, ma lo scopo designato non era accesso della riga di comando o lo spostamento da Esplora risorse. Per vedere come è stato ottenuto in questo caso, è opportuno tornare indietro l'orologio su un decennio.

Come è stato chiamato, in giorni anticipati di Windows NT, nella directory C:\WINNT\Profiles si trovavano i profili utente. E, Sì, quindi nuovamente il nome predefinito per la directory di Windows era WINNT. Durante lo sviluppo di Windows 2000, considerazioni sulla protezione e i commenti dei clienti aziendali richiesto gli sviluppatori del sistema operativo per spostare la directory dei profili utente fuori della directory di Windows in modo che questi ultimi di impostazioni di protezione potrebbe essere rafforzate.

Prima della modifica, la directory di Windows, ovvero la directory più importante del sistema, ovvero aveva l'isola di insecurity nella parte centrale. Persone che desiderano applicare la protezione più rigide, di nuovo l'intera directory era necessario tiptoe intorno alla sottodirectory profili almeno essi finiscono bloccano accidentalmente tutti gli utenti di accedere al sistema. Spostare i profili di fuori della directory di Windows il problema è stato risolto.

Spostare la cartella fornito un'eccellente opportunità per rinominare in un nome più descrittivo. Una delle scelte anticipate era di Documenti e impostazioni, ma la e commerciale (&) ha causato un numero elevato di problemi di compatibilità delle applicazioni. Ad esempio, alcuni programmi accidentalmente interpretato la e commerciale (&) come indicatore di scelta rapida da tastiera e wound fino alla directory dalla visualizzazione sotto forma di documenti _Settings (seguendo la convenzione utilizzata nei menu e finestre di dialogo, di sottolineatura il tasto di scelta rapida).

Windows 2000 liquidate in documenti e impostazioni, che viene fornito un nome sufficientemente descrittivo per la directory ma non è in grado di tenere conto di altri fattori. Per, uno spazio incorporato apportate digitando il percorso più complesso a causa della costante necessità di applicare tra virgolette. Inoltre, la lunghezza del nome elevata è stato un ostacolo, soprattutto perché tagliare nel

MAX_PATH

limite per i nomi di percorso di Win32. Questi e altri fattori chiesto al team di Windows di riorganizzare le varie directory di sistema ancora nuovamente in Vista e la disposizione estende in Windows 7.

Quando le directory spostata la seconda volta, Windows lasciati congiunzioni per facilitare le applicazioni che aveva percorsi hard-coded a queste directory quando devono essere utilizzate le funzioni, ad esempio

SHGetFolderPath

e

GetProfilesDirectory

(o, se si è un tipo di script di persona, il

Shell.Application.NameSpace

metodo che visto nuovamente nel numero di novembre 2005).

Se un'applicazione tenta di accedere al file

C:\Documents and Settings\username\Start Avvio\Programmi\Internet Explorer.lnk

congiunzioni installate all'indirizzo

Documents and Settings

e all'indirizzo

Menu Start

mostrerà la chiamata per la nuova posizione corretta, che per un profilo non comune locale è ora

C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Avvio\Programmi\Internet Explorer.lnk

Naturalmente, i programmatori non più di essi deve avere hardcoded quello vecchio dovrebbero questa nuova posizione hardcoded, ovvero devono utilizzare le funzioni appropriate per determinare i percorsi delle cartelle conosciute.

Ovviamente, una nuova opportunità possibile creare un nuovo problema: Un'applicazione che non è familiare con congiunzioni potrebbe rimanere bloccata in un ciclo infinito quando si tenta di eseguire un attraversamento dell'albero di directory ricorsiva. Per evitare che ciò accada, congiunzioni compatibilità consentono l'attraversamento delle directory, ma negano esplicitamente autorizzazione Elenca il contenuto: Se si tenta di accedere a queste cartelle da Explorer o il prompt dei comandi, si otterrà un errore di accesso negato .

I collegamenti simbolici compatibilità concedere accesso sufficienti per svolgere il proprio obiettivo di fornire la compatibilità per le applicazioni meno recenti che unwisely scelto per i nomi delle directory di livello di codice. Ma non commercializzati sufficiente rope per consentire questi stessi causano danni gravi di applicazioni meno recenti. Elenca il contenuto di di blocco ha inoltre l'effetto collaterale piacevole di rimozione di un aspetto accattivante difficoltà per i programmatori di nuovi, che potrebbero essere tentati di continuare la tradizione di tali applicazioni meno recenti. Questa tecnica funzionerà per guidare gli utenti nella direzione giusta? Comunicherà unica volta.

 

Raymond Chen Sito Web del Raymnond, Old New Thing, e gestire in modo identico con titolo libro (Addison-Wesley, 2007) di Windows della cronologia, programmazione Win32 e soymilk salty.

Contenuto correlato

Windows Confidential: La codifica è diversa dalla crittografia

Windows Confidential: Nomi file di Windows "imbellettati"

Windows Confidential: Credenziali memorizzate nella cache