Share via


Rilevamento dei collegamenti distribuiti e identificatori di oggetti

L'archiviazione di un riferimento a un file o a una directory usando 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 distribuito consente alle applicazioni client di tenere traccia delle origini di collegamento spostate. I client che sottoscrivono il servizio di rilevamento collegamenti possono mantenere l'integrità dei riferimenti e gli oggetti possono essere rilevati in modo trasparente all'utente.

Identificatori di oggetto

Il servizio di rilevamento dei collegamenti gestisce 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. Rinomina, backup e operazioni di ripristino conservano GLI ID oggetto. Tuttavia, le operazioni di copia non mantengono gli ID oggetto, perché violano la loro 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 collegamenti. Al contrario, quando si elimina un ID oggetto, il servizio di rilevamento collegamenti interrompe la gestione dei collegamenti al file. Per un elenco dei codici di controllo del file system che eseguono operazioni sugli ID oggetto, vedere Codici di controllo gestione file.

Il servizio di rilevamento collegamenti distribuito tiene traccia delle origini di collegamento per i collegamenti della shell e i 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 collegamento.

I collegamenti della 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 del file e delle informazioni sul file che includono la data di creazione, le dimensioni del file e l'estensione.

Il collegamento OLE include lo stesso rilevamento dei collegamenti euristici. Windows include anche lo stesso rilevamento dei collegamenti euristici 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

  1. Cercare quattro livelli di directory dall'ultima directory.
  2. Spostarsi su una directory e ripetere i passaggi 1 e 2 altri tre volte, che possono restituire risultati se l'oggetto è stato spostato nelle vicinanze.
  3. Cercare quattro livelli verso il basso dalla radice desktop, che può restituire risultati se l'oggetto è stato spostato in una posizione nello stesso desktop.
  4. Cercare quattro livelli verso il basso dalla radice in ogni unità fissa locale.
  5. 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 producono sempre risultati positivi e possono richiedere tempo.

 

Per altre informazioni sui collegamenti della shell, vedere IShellLink.

Per altre informazioni sui collegamenti OLE, vedere IOleLink.

Se viene effettuato un collegamento a un file in NTFS 3.0 o versioni successive e il file viene spostato in qualsiasi altro volume con NTFS 3.0 o versioni successive all'interno dello stesso dominio, il file può essere trovato dal servizio di rilevamento, soggetto a considerazioni sul 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 ntfsinfoX:

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 collegare un documento di testo, il documento di testo è l'origine del collegamento e il collegamento della 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 di 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 collegamenti distribuito tenta anche di mantenere i collegamenti nelle situazioni precedenti anche quando non si verificano all'interno di un dominio, ovvero sono dominio incrociato o all'interno di un gruppo di lavoro. I collegamenti possono sempre essere mantenuti in queste situazioni quando la condivisione di rete nel computer di origine del collegamento viene modificata. Possono essere mantenuti anche 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.

La funzionalità di rilevamento dei collegamenti viene implementata principalmente sotto forma di due servizi di sistema seguenti:

  • Manutenzione collegamenti distribuiti client
  • Server di rilevamento collegamenti distribuiti

Client di rilevamento collegamenti distribuiti

Il client di rilevamento dei collegamenti distribuito 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 collegamento. Quando viene spostata un'origine di collegamento, il servizio passa le informazioni al server di rilevamento dei collegamenti distribuito eseguito nei controller di dominio.

Server di rilevamento collegamenti distribuiti

Il server di rilevamento dei collegamenti distribuito viene eseguito in ogni controller di dominio in un dominio. Il servizio accetta notifiche di file e volumi spostati dal servizio di rilevamento in un computer e consente al client di rilevamento dei collegamenti distribuiti di eseguire query sulla posizione corrente di un'origine collegamento.

Questo servizio server gestisce le informazioni nei controller di dominio sui volumi e sui file spostati. Le informazioni sugli spostamenti non possono aumentare oltre una dimensione specifica e vengono rimosse automaticamente se non è necessario.

I servizi di rilevamento dei collegamenti vengono esposti dalle interfacce IShellLink e IOleLink . Pertanto, vengono usati dai tasti di scelta rapida della shell. Quando il metodo IShellLink::Resolve viene chiamato 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 , viene chiamato automaticamente nel servizio di rilevamento.

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 versioni successive. Pertanto, se un'origine di collegamento viene spostata in un volume del file system FAT, le informazioni di rilevamento vengono 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 vengono perse. Quando le informazioni di rilevamento dei collegamenti vengono perse, non viene fatto alcun danno al file di origine del collegamento stesso, non è semplicemente tracciabile 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 ntfsinfoX:

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 riavvio. Un nuovo volume potrebbe diventare disponibile a causa della ripartizione, della riformattazione di un volume del file system FAT nel file system NTFS o della connessione di una nuova unità esterna.