Rilevamento dei collegamenti distribuiti e identificatori di oggetto
L'archiviazione di un riferimento a un file o a una directory tramite il percorso e il nome file non è affidabile. Se un utente rinomina un file, interrompe i collegamenti al file. Se un utente rinomina la directory, interrompe i collegamenti al file e tutti i file e le sottodirectory nell'albero della directory.
Il servizio di rilevamento dei collegamenti distribuiti consente alle applicazioni client di tenere traccia delle origini di collegamento spostate. I client che sottoscrivono il servizio di rilevamento dei collegamenti possono mantenere l'integrità dei relativi riferimenti e gli oggetti possono essere rilevati in modo trasparente per l'utente.
Identificatori di oggetto
Il servizio di rilevamento dei collegamenti mantiene il collegamento a un oggetto usando un identificatore di oggetto (ID). Un ID oggetto è un attributo facoltativo che identifica in modo univoco un file o una directory in un volume.
Un indice di tutti gli ID oggetto viene archiviato nel volume. Le operazioni di ridenominazione, backup e ripristino mantengono gli ID oggetto. Tuttavia, le operazioni di copia non mantengono gli ID oggetto, perché violano l'univocità.
È possibile eseguire le operazioni seguenti sugli ID oggetto:
- Creazione
- Eliminazione
- Query
Quando si crea un ID oggetto, si stabilisce l'identità del file al servizio di rilevamento dei collegamenti. Viceversa, quando si elimina un ID oggetto, il servizio di rilevamento dei collegamenti smette di mantenere i collegamenti al file. Per un elenco dei codici di controllo del file system che eseguono operazioni sugli ID oggetto, vedere Codici di controllo di gestione file.
Il servizio di rilevamento dei collegamenti distribuiti tiene traccia delle origini dei collegamenti alla shell e dei collegamenti OLE all'interno dei volumi del file system NTFS. Il client di collegamento può correggere un collegamento interrotto con informazioni aggiornate sulla nuova posizione dell'origine del collegamento.
Funzionalità di rilevamento dei collegamenti
I collegamenti alla shell includono il rilevamento dei collegamenti euristici che usa un algoritmo di ricerca albero per trovare una corrispondenza per un'origine collegamento spostata. L'algoritmo di ricerca si basa sull'ultimo percorso noto delle informazioni sul file e sui file che includono la data di creazione, le dimensioni del file e il nome e l'estensione.
Il collegamento OLE include lo stesso rilevamento euristico dei collegamenti. Windows include anche lo stesso rilevamento euristico dei collegamenti con alcuni miglioramenti aggiunti per la ricerca di spazi dei nomi per produrre risultati in alcuni scenari comuni. I miglioramenti includono la procedura seguente che dipende dai limiti di tempo imposti da un'applicazione client.
Per cercare spazi dei nomi
- Cercare quattro livelli di directory verso il basso dall'ultima directory.
- Spostarsi su una directory e ripetere i passaggi 1 e 2 altri tre volte, che possono produrre risultati se l'oggetto è stato spostato nelle vicinanze.
- Cercare quattro livelli verso il basso dalla radice desktop, che può produrre risultati se l'oggetto è stato spostato in una posizione sullo stesso desktop.
- Cercare quattro livelli verso il basso dalla radice in ogni unità fissa locale.
- Ripetere i passaggi da 1 a 3 senza il limite di quattro directory.
Nota
Questi schemi di rilevamento dei collegamenti sono trasparenti per l'utente finale. Tuttavia, non sempre producono risultati positivi e possono richiedere molto tempo.
Per altre informazioni sui collegamenti alla shell, vedere IShellLink.
Per altre informazioni sui collegamenti OLE, vedere IOleLink.
Se viene eseguito un collegamento a un file in NTFS 3.0 o versione successiva e il file viene spostato in qualsiasi altro volume con NTFS 3.0 o versione successiva all'interno dello stesso dominio, il file può essere trovato dal servizio di rilevamento, soggetto a considerazioni relative al tempo. Inoltre, se il file viene spostato all'esterno del dominio o all'interno di un gruppo di lavoro, viene trovato.
Per ottenere la versione NTFS di un volume, aprire un prompt dei comandi con diritti di accesso amministratore ed eseguire il comando seguente:
fsutil fsinfo ntfsinfo X:
dove X è la lettera di unità del volume.
Quando viene creato un collegamento a un file, il file di destinazione viene considerato l'origine del collegamento e l'autore del collegamento è il client di collegamento. Ad esempio, se viene creato un collegamento alla shell per collegarsi a un documento di testo, il documento di testo è l'origine del collegamento e il collegamento alla shell è il client di collegamento.
Il servizio di rilevamento dei collegamenti distribuiti gestisce i collegamenti ai file per le situazioni seguenti che si verificano all'interno di un dominio:
- Il file di origine del collegamento viene spostato da un volume del file system NTFS a un altro all'interno dello stesso dominio.
- Il nome del computer che contiene l'origine del collegamento viene rinominato.
- Le condivisioni di rete nel computer di origine del collegamento vengono modificate.
- Il volume che contiene il file di origine del collegamento viene spostato in un altro computer all'interno dello stesso dominio.
Il servizio di rilevamento dei collegamenti distribuiti tenta anche di mantenere i collegamenti nelle situazioni precedenti anche quando non si verificano all'interno di un dominio, ovvero sono tra domini o all'interno di un gruppo di lavoro. I collegamenti possono essere sempre mantenuti in queste situazioni quando viene modificata la condivisione di rete nel computer di origine del collegamento. Possono anche essere mantenuti quando un'origine di collegamento viene spostata all'interno di un computer. I collegamenti possono in genere essere mantenuti quando l'origine del collegamento viene spostata in un altro computer, ma questa forma di rilevamento è meno affidabile nel tempo.
Funzionalità di rilevamento dei collegamenti
La funzionalità di rilevamento dei collegamenti viene implementata principalmente sotto forma di due servizi di sistema seguenti:
- Manutenzione collegamenti distribuiti client
- Manutenzione collegamenti distribuiti server
-
Client di rilevamento dei collegamenti distribuiti
-
Il client di rilevamento dei collegamenti distribuiti viene eseguito in tutti i computer e gestisce le attività di rilevamento dei collegamenti per tale computer. Queste attività includono la ricerca di origini di collegamento e lo spostamento dell'origine dei collegamenti di elaborazione. Quando un'origine di collegamento viene spostata, il servizio passa le informazioni al server di rilevamento dei collegamenti distribuito eseguito nei controller di dominio.
-
Server di rilevamento dei collegamenti distribuiti
-
Il server di rilevamento dei collegamenti distribuiti viene eseguito in ogni controller di dominio in un dominio. Il servizio accetta notifiche di spostamenti di file e volumi dal servizio di rilevamento in un computer e consente al client di rilevamento dei collegamenti distribuiti di eseguire una query sul percorso corrente di un'origine del collegamento.
Questo servizio server gestisce le informazioni nei controller di dominio relativi a volumi e file spostati. Le informazioni sugli spostamenti non possono aumentare oltre una dimensione specifica e vengono rimosse automaticamente se non sono necessarie.
I servizi di rilevamento dei collegamenti vengono esposti dalle interfacce IShellLink e IOleLink. Pertanto, vengono usati dai collegamenti della shell. Quando viene chiamato il metodo IShellLink::Resolve e non è possibile trovare il file referenziale, ad esempio quando l'utente attiva un collegamento alla shell, il servizio di rilevamento viene chiamato automaticamente per trovare il file. Analogamente, quando l'implementazione IOleLink non riesce a trovare un file, ad esempio nel relativo metodo BindToSource, chiama automaticamente sul servizio di rilevamento.
Limitazioni del rilevamento dei collegamenti
I servizi di rilevamento dei collegamenti distribuiti sono disponibili solo nel file system NTFS e sono disponibili solo per le origini di collegamento in NTFS 3.0 o versione successiva. Pertanto, se un'origine di collegamento viene spostata in un volume di file system FAT, le informazioni di rilevamento andranno perse. Inoltre, se un'origine di collegamento viene spostata tra NTFS 3.0 o versione successiva, ma il computer che esegue lo spostamento esegue una versione precedente di Windows, le informazioni di rilevamento dei collegamenti andranno perse. Quando le informazioni di rilevamento dei collegamenti vengono perse, non viene fatto alcun danno al file di origine del collegamento stesso, non è semplicemente rilevabile dai servizi di rilevamento dei collegamenti distribuiti.
Per ottenere la versione NTFS di un volume, aprire un prompt dei comandi con diritti di accesso amministratore ed eseguire il comando seguente:
fsutil fsinfo ntfsinfo X:
dove X è la lettera di unità del volume.
I collegamenti ai file su supporti rimovibili non vengono mantenuti. Inoltre, il servizio di rilevamento non riconosce un nuovo volume del file system NTFS fino a quando il sistema non viene riavviato. Un nuovo volume potrebbe diventare disponibile a causa del ripartizioni, della riformattazione di un volume di file system FAT al file system NTFS o della connessione di una nuova unità esterna.