@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

分解能

FAT・NTFSの分解能はプラットフォーム SDK GetFileTime で下記のように説明されています。

注意 すべてのファイルシステムが、作成時刻と最終アクセス時刻を記録できるわけではありません。また、すべてのファイルシステムがそれらの時刻を同じ形式で記録しているわけでもありません。たとえば、Windows NT の FAT では、作成時刻の分解能は 10 ミリ秒(ms)、最終更新時刻の分解能は 2 秒、最終アクセス時刻の分解能は 1 日(実質的にはアクセス日付)です。NTFS では、アクセス時刻の分解能は 1 時間です。したがって、GetFileTime 関数は、SetFileTime 関数を使って指定したのと同じ時刻を返すとは限りません。さらに、FAT はローカルの時刻をディスクに記録します。それに対し、NTFS は世界協定時刻(UTC)をディスクに記録するので、タイムゾーンまたは夏時間の変化による影響を受けません。

NTFS では4つのタイムスタンプがありますが、いずれも 12:00 A.M. January 1, 1601 (UTC)からの 100ns でのインターバル,FAT はローカル時刻を記録しています。FAT の場合には設定可能な範囲が1980年1月1日〜2107年12月31日までということみたいですが、まぁローカル時間が DOS 日付形式でそのまま記録されていますね。

FileTimeToDosDateTime
http://msdn.microsoft.com/ja-jp/library/cc429721.aspx

Windiws Vista 以降ではデフォルトですが、最終アクセス日時の更新をレジストリで無効化することも可能ですので XP などでもレジストリを確認した方がよいケースもあるかもしれません。関連する情報は「NtfsDisableLastAccessUpdate」をキーワードに検索すると色々と発見できます。

Disabling Last Access Time in Windows Vista to improve NTFS performance
http://blogs.technet.com/filecab/archive/2006/11/07/disabling-last-access-time-in-windows-vista-to-improve-ntfs-performance.aspx

ファイルシステムの分解能の差による影響としては、NTFS から FAT ファイルシステムへファイルコピーした時にタイムスタンプが変化するという点もありますね。

[NT] NTFSからFATへのファイルのコピー時に日時が変わる
http://support.microsoft.com/kb/402160/ja
この現象は、 NTFS ファイルと FAT ファイルとのファイルのタイムスタンプの情報量の差によって生じます。 NTFS ファイルは、ファイルの作成日時を、 100 ナノ秒単位で記録していますが、 FAT ファイルは 偶数秒単位でしか記録することができません。そのため、奇数秒に作成されたファイルを NTFS パーティションから FAT パーティションにコピーすると、作成日時の繰り上げが発生します。 FAT パーティションから NTFS パーティションへのコピー時にはこの現象は発生しません。

あと、タイムゾーンによる影響としてはこんなお話もあるようですが、直接影響を受けるケースというのはマレでしょうかね。マルウェアが適当に変なタイムスタンプ付けたりした場合?通常、システム時刻を 1601/01/01 に設定するケースってのはありませんよね。

DIR コマンドを実行したときファイルの日付と時刻が間違って表示される
http://support.microsoft.com/kb/314048/ja
システム時刻が 1601 年 1 月 1 日午前 0 時 00 分 (UTC) に設定されている場合、ファイルが作成されると、そのファイルに対して保存されるさまざまなファイル時刻は、値がゼロ (0) の FILETIME となります。その後、ユーザーが dir コマンドを実行してファイルの一覧を表示すると、ファイルから UTC 時刻が読み取られ、現地時刻への調整が行われます。現地時刻に正のオフセットが加算される場合、有効な FILETIME が算出されます。しかし、負のオフセットが加算されるようにコンピュータのタイムゾーンが構成されている場合、無効な FILETIME 値が算出されます。