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;
        }
Example #2
0
        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);
        }
Example #3
0
 private void WriteRestartPage(LfsRestartPage restartPage)
 {
     byte[] pageBytes = restartPage.GetBytes((int)restartPage.SystemPageSize, true);
     WriteData(0, pageBytes);
     WriteData(restartPage.SystemPageSize, pageBytes);
 }