分散リンクの追跡とオブジェクト識別子

パスとファイル名を使用してファイルまたはディレクトリへの参照を格納することは信頼できません。 ユーザーがファイルの名前を変更すると、ファイルへのリンクが解除されます。 ユーザーがディレクトリの名前を変更すると、ファイルへのリンクと、ディレクトリ ツリー内のすべてのファイルとサブディレクトリが切断されます。

分散リンク追跡サービスを使用すると、クライアント アプリケーションは移動したリンク ソースを追跡できます。 リンク追跡サービスをサブスクライブするクライアントは、参照の整合性を維持でき、オブジェクトはユーザーに対して透過的な方法で追跡できます。

オブジェクトの識別子

リンク追跡サービスは、オブジェクト 識別子 (ID) を使用してオブジェクトへのリンクを保持します。 オブジェクト ID は、ボリューム上のファイルまたはディレクトリを一意に識別する省略可能な属性です。

すべてのオブジェクト ID のインデックスがボリュームに格納されます。 名前の変更、バックアップ、および復元の操作では、オブジェクト ID が保持されます。 ただし、オブジェクト ID は一意性に違反するため、コピー操作ではオブジェクト ID は保持されません。

オブジェクト ID に対して次の操作を実行できます。

  • 作成
  • 削除
  • クエリ

オブジェクト ID を作成するときは、リンク追跡サービスへのファイルの ID を確立します。 逆に、オブジェクト ID を削除すると、リンク追跡サービスはファイルへのリンクの維持を停止します。 オブジェクト ID に対する操作を実行するファイル システム制御コードの一覧については、「 ファイル管理コントロール コード」を参照してください。

分散リンク追跡サービスは、NTFS ファイル システム ボリューム内のシェル ショートカットと OLE リンクのリンク ソースを追跡します。 リンク クライアントは、リンク ソースの新しい場所に関する更新された情報を使用して、壊れたリンクを修正できます。

シェル ショートカットには、ツリー検索アルゴリズムを使用して移動されたリンク ソースの一致を検索するヒューリスティック リンク追跡が含まれます。 検索アルゴリズムは、作成日、ファイル サイズ、ファイル名と拡張子を含むファイルとファイル情報の最後の既知のパスに基づいています。

OLE リンクには、同じヒューリスティック リンク追跡が含まれます。 Windows には、同じヒューリスティック リンク追跡も含まれています。また、名前空間を検索して一般的なシナリオの結果を得るための機能強化もいくつか追加されています。 この機能強化には、クライアント アプリケーションによって課される時間制限に依存する次の手順が含まれます。

名前空間を検索するには

  1. 最後のディレクトリから 4 つのディレクトリ レベルを検索します。
  2. 1 つのディレクトリを上に移動し、手順 1 と 2 をもう 3 回繰り返します。これにより、オブジェクトが近くに移動した場合に結果が得られる可能性があります。
  3. デスクトップ ルートから 4 レベル下を検索します。これにより、オブジェクトが同じデスクトップ上の場所に移動した場合に結果が得られる可能性があります。
  4. 各ローカル固定ドライブのルートから 4 つのレベルを検索します。
  5. 4 つのディレクトリ制限なしで手順 1 から 3 を繰り返します。

Note

これらのリンク追跡スキームは、エンド ユーザーに対して透過的です。 ただし、常に肯定的な結果が得られるとは限らず、時間がかかる場合があります。

 

シェル ショートカットの詳細については、「 IShellLink」を参照してください。

OLE リンクの詳細については、「 IOleLink」を参照してください。

NTFS 3.0 以降のファイルへのリンクが作成され、そのファイルが同じドメイン内の NTFS 3.0 以降の他のボリュームに移動された場合は、時間の考慮事項に従って、追跡サービスによってファイルが見つかります。 さらに、ファイルがドメインの外部またはワークグループ内に移動された場合は、ファイルが見つかります。

ボリュームの NTFS バージョンを取得するには、管理者権限でコマンド プロンプトを開き、次のコマンドを実行します。

fsutil fsinfo ntfsinfoX:

ここで 、X はボリュームのドライブ文字です。

ファイルへのリンクが作成されると、ターゲット ファイルは リンク ソースと見なされ、リンクの作成者は リンク クライアントになります。 たとえば、テキスト ドキュメントにリンクするためにシェル ショートカットが作成された場合、テキスト ドキュメントはリンク ソースであり、シェル ショートカットはリンク クライアントです。

分散リンク追跡サービスは、ドメイン内で発生する次の状況に対してファイル リンクを保持します。

  • リンク ソース ファイルは、ある NTFS ファイル システム ボリュームから同じドメイン内の別の NTFS ファイル システム ボリュームに移動されます。
  • リンク ソースを保持しているコンピューターの名前の名前が変更されます。
  • リンク ソース コンピューター上のネットワーク共有が変更されます。
  • リンク ソース ファイルを保持するボリュームは、同じドメイン内の別のコンピューターに移動されます。

また、分散リンク追跡サービスは、ドメイン内、つまりクロス ドメインまたはワークグループ内で発生しない場合でも、上記の状況でリンクの維持を試みます。 リンク ソース コンピューター上のネットワーク共有が変更された場合、これらの状況では常にリンクを維持できます。 また、リンク ソースがコンピューター内で移動されたときにも維持できます。 リンク ソースを別のコンピューターに移動すると、通常はリンクを維持できますが、この形式の追跡は時間の経過と同時に信頼性が低下します。

リンク追跡機能は、主に次の 2 つのシステム サービスの形式で実装されます。

  • 分散リンク トラッキング クライアント
  • 分散リンク追跡サーバー

分散リンク追跡クライアント

分散リンク追跡クライアントは、すべてのコンピューターで実行され、そのコンピューターのリンク追跡アクティビティを管理します。 これらのアクティビティには、リンク ソースの検索やリンク ソースの移動の処理が含まれます。 リンク ソースが移動されると、サービスは、ドメイン コントローラーで実行されている分散リンク追跡サーバーに情報を渡します。

分散リンク追跡サーバー

分散リンク追跡サーバーは、ドメイン内の各ドメイン コントローラーで実行されます。 サービスは、コンピューター上の追跡サービスからファイルとボリュームの移動の通知を受け取り、分散リンク追跡クライアントがリンク ソースの現在の場所に対してクエリを実行できるようにします。

このサーバー サービスは、移動されたボリュームとファイルに関する情報をドメイン コントローラーに保持します。 移動に関する情報は、特定のサイズを超えて増加することはできません。不要になると自動的に削除されます。

リンク追跡サービスは、 IShellLink インターフェイスと IOleLink インターフェイスによって公開されます。 したがって、これらはシェル ショートカットによって使用されます。 IShellLink::Resolve メソッドが呼び出され、参照先ファイルが見つからない場合 (たとえば、ユーザーがシェル ショートカットをアクティブにすると、追跡サービスが自動的に呼び出されてファイルが検索されます)。 同様に、 IOleLink 実装で BindToSource メソッドなどのファイルが見つからない場合は、追跡サービスでが自動的に呼び出されます。

分散リンク追跡サービスは NTFS ファイル システムでのみ使用でき、NTFS 3.0 以降のリンク ソースでのみ使用できます。 したがって、リンク ソースを FAT ファイル システム ボリュームに移動すると、追跡情報は失われます。 さらに、NTFS 3.0 以降の間でリンク ソースが移動されたが、移動を実行しているコンピューターが以前のバージョンの Windows を実行している場合、リンク追跡情報は失われます。 リンク追跡情報が失われると、リンク ソース ファイル自体に害が及びません。分散リンク追跡サービスでは追跡できません。

ボリュームの NTFS バージョンを取得するには、管理者権限でコマンド プロンプトを開き、次のコマンドを実行します。

fsutil fsinfo ntfsinfoX:

ここで 、X はボリュームのドライブ文字です。

リムーバブル メディア上のファイルへのリンクは保持されません。 また、追跡サービスは、システムが再ブートされるまで、新しい NTFS ファイル システム ボリュームを認識しません。 パーティションの再作成、FAT ファイル システム ボリュームの NTFS ファイル システムへの再フォーマット、または新しい外部ドライブの接続により、新しいボリュームが使用可能になる可能性があります。