Index: src/libchcore/TLocalFilesystemFile.cpp
===================================================================
diff -u -N -r71bfd29bfef00738456ab96f336feeb8a02c4df6 -rbaad6054459abaaf69cbfd1ebad8783085160d99
--- src/libchcore/TLocalFilesystemFile.cpp	(.../TLocalFilesystemFile.cpp)	(revision 71bfd29bfef00738456ab96f336feeb8a02c4df6)
+++ src/libchcore/TLocalFilesystemFile.cpp	(.../TLocalFilesystemFile.cpp)	(revision baad6054459abaaf69cbfd1ebad8783085160d99)
@@ -151,6 +151,28 @@
 		return fsMove;
 	}
 
+	void TLocalFilesystemFile::SetBasicInfo(DWORD dwAttributes, const TFileTime& ftCreationTime, const TFileTime& ftLastAccessTime, const TFileTime& ftLastWriteTime)
+	{
+		LOG_TRACE(m_spLog) << "Updating file times" << GetFileInfoForLog(m_bNoBuffering);
+
+		EnsureOpen();
+
+		FILE_BASIC_INFO basicInfo = { 0 };
+		basicInfo.FileAttributes = dwAttributes;
+		basicInfo.CreationTime.QuadPart = ftCreationTime.ToUInt64();
+		basicInfo.LastAccessTime.QuadPart = ftLastAccessTime.ToUInt64();
+		basicInfo.LastWriteTime.QuadPart = ftLastWriteTime.ToUInt64();
+		basicInfo.ChangeTime.QuadPart = ftLastWriteTime.ToUInt64();
+
+		if(!SetFileInformationByHandle(m_hFile, FileBasicInfo, &basicInfo, sizeof(FILE_BASIC_INFO)))
+		{
+			DWORD dwLastError = GetLastError();
+			LOG_ERROR(m_spLog) << L"Failed to set file basic info." << GetFileInfoForLog(m_bNoBuffering);
+
+			throw TFileException(eErr_CannotSetFileInfo, dwLastError, m_pathFile, L"Cannot set basic file info", LOCATION);
+		}
+	}
+
 	void TLocalFilesystemFile::Truncate(file_size_t fsNewSize)
 	{
 		LOG_TRACE(m_spLog) << "Truncating file to: " << fsNewSize << GetFileInfoForLog(m_bNoBuffering);