Пытаюсь разобраться в метках времени Windows .... - PullRequest
1 голос
/ 28 июля 2011

Я нахожусь в ситуации, которая предполагает ручное восстановление необработанных данных, включая записи MFT и другие артефакты Windows.Я понимаю, что метки времени в записях MFT представляют собой 64-разрядные целые числа с прямым порядком байтов и рассчитываются по количеству интервалов в 100 наносекунд с 01.01.1601 00:00:00 UTC.Я также знаком с временными метками заголовков электронной почты Windows, которые состоят из двух 32-разрядных значений, которые объединяются в одно 64-разрядное значение, также рассчитанное по числу интервалов в 100 наносекунд с 01.01.16 00:00:00 UTC.

Но есть и другие временные метки Windows с разными эпохами, такие как временные метки SQL Server, которые, я полагаю, используют дату 1800-х годов.Я не могу найти много документации по всему этому.Какие временные метки используются в Windows, кроме двух, перечисленных выше?Как ты их ломаешь?

1 Ответ

1 голос
/ 07 августа 2011

Вот некоторый код для декодирования временных меток Windows:

static string microsoftDateToISODate(const uint64_t &time) {
/**
 * See comment above for more information on
 * SECONDS_BETWEEN_WIN32_EPOCH_AND_UNIX_EPOCH 
 *
 * Convert UNIX time_t to ISO8601 format
 */
time_t tmp = (time / ONE_HUNDRED_NANO_SEC_TO_SECONDS)
    - SECONDS_BETWEEN_WIN32_EPOCH_AND_UNIX_EPOCH;

struct tm time_tm;
gmtime_r(&tmp, &time_tm);
char buf[256];
strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S", &time_tm);
return string(buf);
}

А ваша ссылка на временные метки Mac:

...