private void WriteRestartPage(LfsRestartPage restartPage) { byte[] pageBytes = restartPage.GetBytes((int)restartPage.SystemPageSize, true); // The NTFS v5.1 driver will always read both restart pages and compare the CurrentLsn to determine which is more recent (even if the CleanDismount flag is set) ulong offset = m_isFirstRestartPageTurn ? 0 : restartPage.SystemPageSize; WriteData(offset, pageBytes); m_isFirstRestartPageTurn = !m_isFirstRestartPageTurn; }
private static void WriteLogFile(Volume volume, long logFileStartSector, long logFileSize, int bytesPerLogPage) { const int BytesPerSystemPage = 4096; LfsClientRecord ntfsClientRecord = new LfsClientRecord(NTFSLogClient.ClientName); LfsRestartPage restartPage = LfsRestartPage.Create(logFileSize, BytesPerSystemPage, bytesPerLogPage, ntfsClientRecord); long secondRestartPageStartSector = logFileStartSector + BytesPerSystemPage / volume.BytesPerSector; long firstRecordPageStartSector = logFileStartSector + 2 * BytesPerSystemPage / volume.BytesPerSector; byte[] restartPageBytes = restartPage.GetBytes(BytesPerSystemPage, true); volume.WriteSectors(logFileStartSector, restartPageBytes); volume.WriteSectors(secondRestartPageStartSector, restartPageBytes); byte[] recordPagesBytes = new byte[logFileSize - 2 * BytesPerSystemPage]; for (int index = 0; index < recordPagesBytes.Length; index += 4) { LittleEndianWriter.WriteUInt32(recordPagesBytes, index, LfsRecordPage.UninitializedPageSignature); } volume.WriteSectors(firstRecordPageStartSector, recordPagesBytes); }
private void WriteRestartPage(LfsRestartPage restartPage) { byte[] pageBytes = restartPage.GetBytes((int)restartPage.SystemPageSize, true); WriteData(0, pageBytes); WriteData(restartPage.SystemPageSize, pageBytes); }