예제 #1
0
        /// <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;
        }
예제 #2
0
 /// <summary>
 /// Awakes filter worker
 /// </summary>
 public static void AwakeFilterWorker()
 {
     Win32API.SetEvent(varFilterJobsUpdatedEvent);
 }
예제 #3
0
        /// <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;
        }