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

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

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

オブジェクトの識別子

リンク追跡サービスは、オブジェクト識別子 (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 ntfsinfo X:

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

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

分散リンク トラッキング サービスは、ドメイン内で発生する次の状況のファイル リンクを維持します。

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

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

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

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

分散リンク トラッキング クライアント

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

分散リンク トラッキング サーバー

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

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

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

分散リンク トラッキング サービスは NTFS ファイル システムでのみ使用可能であり、NTFS 3.0 以降のリンク ソースでのみ使用できます。 したがって、リンク ソースが FAT ファイル システム ボリュームに移動されると、追跡情報は失われます。 さらに、リンク ソースが NTFS 3.0 以降間で移動されたが、移動を実行しているコンピューターが以前のバージョンの Windows を実行している場合、リンク追跡情報は失われます。 リンク追跡情報が失われても、リンク ソース ファイル自体には影響はなく、分散リンク追跡サービスでは追跡できなくなるだけです。

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

fsutil fsinfo ntfsinfo X:

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

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