/// <summary> /// /// </summary> /// <param name="FileName"></param> /// <param name="Listeners"></param> /// <returns></returns> public static QuarantineResults UnquarantineFile(string FileName, IntPtr[] Listeners, bool Temp) { lock (MainLock) { if (QueueLocked) { return QuarantineResults.FailedQueueLocked; } } if (!IsFileInQuarantine(FileName)) { return QuarantineResults.FailedFileIsNotInQuarantine; } long InitialSize = 0; string ComressedFileName = ""; long id = 0; lock (MainLock) { foreach (QuarantineItem queued in ItemsQueue) { if (queued.FileName == FileName && queued.Quarantine == false) { return QuarantineResults.FailedAlreadyQueued; } } string command = "SELECT * FROM QuarantineItems WHERE InitialPath='" + FileName + "';"; ArrayList list; if (ClamWinDatabase.ExecReader(command, out list)) { if (list.Count != 0) { InitialSize = long.Parse((string)list[4]); ComressedFileName = (string)list[2]; } else { return QuarantineResults.Failed; } } else { return QuarantineResults.Failed; } id = ItemsCounter++; QuarantineItem item = new QuarantineItem(); item.FileName = Temp ? GetQuarantineTempFolder() + Path.GetFileName(FileName) : FileName; item.Listeners = Listeners; item.Quarantine = false; item.InitialSize = InitialSize; item.CompressedFileName = ComressedFileName; item.Temp = Temp; item.ID = id; ItemsQueue.Add(item); Win32API.SetEvent(NewItemAddedEvent); } NotifyData data = new NotifyData(); data.FileName = FileName; data.Quarantine = false; data.Size = InitialSize; data.ID = id; SendQuarantineNotify(UM_QUARANTINE_QUEUE_NEW_ITEM, data, Listeners); return QuarantineResults.Success; }
/// <summary> /// Awakes filter worker /// </summary> public static void AwakeFilterWorker() { Win32API.SetEvent(varFilterJobsUpdatedEvent); }
/// <summary> /// Quarantine specified file /// </summary> /// <param name="FileName">File to quarantine</param> /// <returns>Result</returns> public static QuarantineResults QuarantineFile(string FileName,IntPtr[] Listeners) { lock (MainLock) { if (QueueLocked) { return QuarantineResults.FailedQueueLocked; } } try { System.IO.FileInfo fi = new System.IO.FileInfo(FileName); if (!fi.Exists) { return QuarantineResults.FailedFileDoesNotExist; } } catch { return QuarantineResults.Failed; } if (IsFileInQuarantine(FileName)) { return QuarantineResults.FailedAlreadyQuarantined; } long id = 0; lock (MainLock) { foreach (QuarantineItem queued in ItemsQueue) { if (queued.FileName == FileName && queued.Quarantine == true) { return QuarantineResults.FailedAlreadyQueued; } } id = ItemsCounter++; QuarantineItem item = new QuarantineItem(); item.FileName = FileName; item.Listeners = Listeners; item.Quarantine = true; item.ID = id; ItemsQueue.Add(item); Win32API.SetEvent(NewItemAddedEvent); } NotifyData data = new NotifyData(); data.FileName = FileName; data.Quarantine = true; data.Size = 0; data.ID = id; try { FileInfo fi = new FileInfo(FileName); data.Size = fi.Length; } catch { } SendQuarantineNotify(UM_QUARANTINE_QUEUE_NEW_ITEM, data, Listeners); return QuarantineResults.Success; }