Share via


変更ジャーナル識別子の使用

NTFS ファイル システムは、署名されていない 64 ビット識別子を各変更ジャーナルに関連付けます。 ジャーナルは、作成時にこの ID でスタンプされます。 ファイル システムは、既存の更新シーケンス番号 (USN) レコードが使用できないか、または使用できない可能性がある新しい識別子でジャーナルにスタンプを付けます。

たとえば、NTFS ファイル システムは、ボリュームが NTFS の 1 つのバージョンから別のバージョンに移動された後に戻るときに、新しい識別子を持つ変更ジャーナルをリサンプリングします。 このような移動は、デュアルブート環境で、またはリムーバブル メディアを操作するときに発生する可能性があります。

指定されたボリュームの現在の変更ジャーナルの ID を取得するには、 FSCTL_QUERY_USN_JOURNAL 制御コードを使用します。 これと他のすべての変更ジャーナル操作を実行するには、システム管理者特権が必要です。 つまり、Administrators グループのメンバーである必要があります。

たとえば、現在の USN 値が可能な最大 USN 値に近づいた場合など、管理者が変更履歴を削除して再作成すると、USN 値は 0 から再び開始されます。 NTFS ファイル システムは、ジャーナルを再作成するのではなく、新しい識別子でジャーナルにスタンプを付けると、USN は 0 にリセットされず、現在の USN から続行されます。 どちらの場合も、既存のすべての USN は将来の USN よりも少なくなります。

レコードの特定のセットに関する情報が必要な場合は、 FSCTL_QUERY_USN_JOURNAL 制御コードを使用して変更ジャーナル ID を取得します。 次に、 FSCTL_READ_USN_JOURNAL 制御コードを使用して、関心のあるジャーナル・レコードを読み取ります。 NTFS ファイル システムは、識別子で指定されたジャーナルに対して有効なレコードのみを返します。

アプリケーションでは、ジャーナルを読み取るためにレコードの USN と識別子の両方が必要です。 この要件は、アプリケーションがファイル内の既存のレコードを無視し、同じボリュームのジャーナルの以前のインスタンスでレコードが書き込まれた場合に整合性チェックを提供します。

関心のあるレコードを取得するには、最も古いレコード (つまり、USN が最も低いレコード) から開始し、関心のある最初のレコードが見つかるまで先にスキャンする必要があります。