fsutil
と呼ばれるMicrosoftWindowsコマンドラインで実行できるユーティリティがあります。受け入れるコマンドの1つは、他のいくつかの引数とともにfsutil usn readjournal <volume pathname>
です。プログラムによって生成されたデータを読み取る方法に関するドキュメントはありますか?私が特に興味を持っているのは、File ID
フィールドとParent file ID
フィールドをどのように解釈して使用するかです。 File name
にはフルパスが含まれていないため、場所に基づいてファイルに関心があるかどうかを判断する方法が不明確です。
レコード例
Usn : 9149751384
File name : Preferences~RF101ac0ae.TMP
File name length : 52
Reason : 0x80000200: File delete | Close
Time stamp : 7/12/2018 11:04:30
File attributes : 0x00000020: Archive
File ID : 0000000000000000000500000000a67b
Parent file ID : 0000000000000000000500000003fa3c
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 128
その出力は USN_RECORD_V3
データ構造に対応します。 ID行に関しては、NTFSボリューム上のすべてのオブジェクトに数値IDがあります。 「ファイルID」行には、その更新の影響を受けるファイルのIDが表示されます。 「親ファイルID」は、それを含むディレクトリのIDです。
ファイルへのパスを取得するには、このユーティリティの別のモードfsutil file queryFileNameById
を使用できます。ボリュームパスとファイルID(0x
が付加されたもの)を取り、フルパスを返します。 NTFSでは同じファイルに異なるパスを与えるハードリンクが許可されているため、「the」パスではなく「a」パスと言います。その場合に返される正確なパスは任意です。ただし、大多数のファイルには1つのリンク/パスしかありません。
例を見てみましょう。私はこのUSNレコードを持っています:
Usn : 46966427728
File name : settings.dat
File name length : 24
Reason : 0x80000001: Data overwrite | Close
Time stamp : 7/11/2018 21:50:57
File attributes : 0x00000020: Archive
File ID : 00000000000000000005000000170d13
Parent file ID : 0000000000000000001200000019ab0e
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 104
ファイルIDを使用して、ファイルへのパスを見つけましょう。
fsutil file queryFileNameById C:\ 0x00000000000000000005000000170d13
結果:
A random link name to this file is \\?\C:\Users\Ben\AppData\Local\Packages\Microsoft.Windows.Photos_8wekyb3d8bbwe\Settings\settings.dat
このファイルは、フォトアプリの構成ストレージのようなもののようです。 USNレコードの場合、ファイルはおそらく現在削除されているため、親IDを使用してファイルの場所を見つける必要があります。ファイルの親IDでクエリを実行すると...
fsutil file queryFileNameById C:\ 0x0000000000000000001200000019ab0e
... settings.dat
ファイルではなく、フォルダへのパスのみを取得します。
A random link name to this file is \\?\C:\Users\Ben\AppData\Local\Packages\Microsoft.Windows.Photos_8wekyb3d8bbwe\Settings