private void ProcessFileCreate(PInvokeWin32.USN_RECORD usn, string volume, MFTSearcherCache db)
        {
            USNRecord record = USNRecord.ParseUSN(volume, usn);

            db.AddRecord(volume, record);
            Debug.WriteLine(string.Format(">>>> NewFile: {0}", record.FullPath));
            if (RecordAddedEvent != null)
            {
                RecordAddedEvent(record);
            }
        }
Exemple #2
0
 public void AddRecord(string volume, USNRecord record)
 {
     EnsureVolumeExistInHashTable(volume);
     if (!VolumeRecords[volume].ContainsKey(record.FRN))
     {
         lock (locker)
         {
             VolumeRecords[volume].Add(record.FRN, record);
         }
     }
 }
Exemple #3
0
        public USNRecord FindByFrn(string volume, ulong frn)
        {
            if ((!VolumeRecords.ContainsKey(volume)))
            {
                throw new Exception(string.Format("DB not contain the volume: {0}", volume));
            }
            USNRecord result = null;

            VolumeRecords[volume].TryGetValue(frn, out result);
            return(result);
        }
        internal static void FillPath(string volume, USNRecord record, MFTSearcherCache db)
        {
            if (record == null)
            {
                return;
            }
            var    fdSource = db.GetVolumeRecords(volume);
            string fullpath = record.Name;

            FindRecordPath(record, ref fullpath, fdSource);
            record.FullPath = fullpath;
        }
        private static void FindRecordPath(USNRecord curRecord, ref string fullpath, Dictionary <ulong, USNRecord> fdSource)
        {
            if (curRecord.IsVolumeRoot)
            {
                return;
            }
            USNRecord nextRecord = null;

            if (!fdSource.TryGetValue(curRecord.ParentFrn, out nextRecord))
            {
                return;
            }
            fullpath = string.Format("{0}{1}{2}", nextRecord.Name, Path.DirectorySeparatorChar, fullpath);
            FindRecordPath(nextRecord, ref fullpath, fdSource);
        }
        private void ProcessRenameNewName(PInvokeWin32.USN_RECORD usn, string volume, MFTSearcherCache db)
        {
            USNRecord newRecord = USNRecord.ParseUSN(volume, usn);

            db.UpdateRecord(volume, newRecord);

            var oldRecord = db.FindByFrn(volume, usn.FRN);

            if (oldRecord != null)
            {
                Debug.WriteLine(string.Format(">>>> RenameFile {0} to {1}", oldRecord.FullPath, newRecord.FullPath));
                if (RecordRenameEvent != null)
                {
                    RecordRenameEvent(oldRecord, newRecord);
                }
            }
        }
Exemple #7
0
 private bool RealUpdateRecord(string volume, Dictionary <string, Dictionary <ulong, USNRecord> > source, USNRecord record)
 {
     if (source.ContainsKey(volume) && source[volume].ContainsKey(record.FRN))
     {
         lock (locker)
         {
             source[volume][record.FRN] = record;
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemple #8
0
 public void UpdateRecord(string volume, USNRecord record)
 {
     RealUpdateRecord(volume, VolumeRecords, record);
 }