Обе метки времени отделены от содержимого файла. Они хранятся вместе с другими метаданными в inode (в большинстве файловых систем Unix) или в эквиваленте Windows - запись файла в "таблице основных файлов". В целом, это очень специфично для используемой файловой системы - FAT и ext4, а btrfs и NTFS делают это совсем по-другому.
Время модификации в Windows обновляется при закрытии файла, если был изменен хотя бы один байт. Независимо от того, являются ли новые данные одинаковыми или разными, не имеет значения, если вызывается функция WriteFile() или связанная функция; новое содержание может даже быть точным соответствием.
Время доступа обновляется, когда файл закрывается после того, как он был открыт для чтения или записи - даже если он не был каким-либо образом изменен. (Это исключает чтение метаданных, так как метаданные находятся вне файла. В Windows программы резервного копирования могут также запросить время, чтобы остаться неизменным.) Обычно существуют дополнительные ограничения на то, когда обновляется это время: например, только если старое время было раньше времени изменения (относительное время Linux), или только если старое время было более часа назад (старая Windows) или не обновлялось в все (более новая Windows).