コード例 #1
0
        /// <summary>
        /// Переместить вирус в карантин по его id
        /// </summary>
        static public void MoveVirusToQuarantine(int id)
        {
            var virusInfo = FoundVirusesManager.getInfo(id);

            if (virusInfo != null && virusInfo.inQuarantine == false)
            {
                var result = AddFileToStorage(virusInfo.file);

                if (result.is_success)
                {
                    virusInfo.inQuarantine     = true;
                    virusInfo.fileInQuarantine = result.fileName;

                    KernelConnectors.Logger.WriteLine("=== [Quarantine] ===");
                    KernelConnectors.Logger.WriteLine("ПЕРЕМЕЩЕНИЕ В КАРАНТИН УСПЕШНО", LoggerLib.LogLevel.OK);
                    KernelConnectors.Logger.WriteLine("   Идентификатор задачи" + virusInfo.id);
                    KernelConnectors.Logger.WriteLine("   Идентификатор вируса" + virusInfo.VirusId);
                    KernelConnectors.Logger.WriteLine("   Файл " + virusInfo.file);
                    KernelConnectors.Logger.WriteLine("   Путь к файлу в карантине " + virusInfo.fileInQuarantine);
                    KernelConnectors.Logger.WriteLine("=== [Quarantine] ===");
                }
                else
                {
                    KernelConnectors.Logger.WriteLine("[Quarantine] Ошибка добавления файла в карантин");
                }
            }
        }
コード例 #2
0
        public static void ScanCompleted(int id, bool found, int virusId, string file)
        {
            if (found)
            {
                var task = getTaskAndRemove(id);

                if (task != null)
                {
                    FoundVirusesManager.AddNewVirus(
                        new VirusInfo(
                            id,
                            task.File,
                            virusId
                            )
                        );

                    KernelConnectors.Logger.WriteLine($"[ScanQueue] Вирус найден {id}!", LoggerLib.LogLevel.OK);
                    KernelConnectors.Logger.WriteLine($"[ScanQueue] Restored = {RestoredFile}!", LoggerLib.LogLevel.OK);
                }
                else
                {
                    KernelConnectors.Logger.WriteLine("[ScanQueue] КРИТИЧЕСКАЯ ОШИБКА, НЕ НАЙДЕНА ЗАДАЧА ОБНАРУЖЕННОГО ВИРУСА!!!", LoggerLib.LogLevel.ERROR);
                }
            }
            else
            {
                KernelConnectors.Logger.WriteLine($"[ScanQueue] Не вирус {id}!");
            }

            RemoveById(id);
        }
コード例 #3
0
        /// <summary>
        /// Инициализация внутренних компонентов ядра
        /// ВАЖНО! Менеджер обнаруженных вирусов должен быть запущен раньше чем менеджер задач сканирования
        /// </summary>
        static void InitKernelComponents()
        {
            API.Init();

            ScannerResponseHandler.Init();
            FoundVirusesManager.Init();
            ScanTasks.Init();
            Quarantine.InitStorage();
        }
コード例 #4
0
        /// <summary>
        /// Инициализация менеджера задач сканирования
        /// </summary>
        public static void Init()
        {
            id = FoundVirusesManager.getLastId() + 1;
            FilterHandler.Run();

            ScannerResponseHandler.onScanCompleted += ScanCompleted;

            Scanner_Output      = KernelConnectors.ScannerService_Output;
            ScannerBinaryWriter = new BinaryWriter(Scanner_Output, KernelInitializator.Config.NamedPipeEncoding);
        }
コード例 #5
0
        public static void Handler()
        {
            KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Запуск, ожидание мьютекса... ");

            KernelConnectors.Filter_Input_Sync.WaitOne();
            {
                if (KernelConnectors.Filter_Input.IsConnected)
                {
                    KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Подключен ");
                }
            }
            KernelConnectors.Filter_Input_Sync.ReleaseMutex();

            while (true)
            {
                string commandBuffer = string.Empty;

                try
                {
                    commandBuffer = KernelConnectors.Filter_Reader.ReadString();
                }
                catch
                {
                    KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Отключаю поток ", LoggerLib.LogLevel.WARN);
                    break;
                }

                if (FoundVirusesManager.Exists(commandBuffer.Substring(1)))
                {
                    //Если файл уже числится у нас как вирус
                    continue;
                }

                switch (commandBuffer[0])
                {
                case '1':
                {
                    KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Создание файла -> " + commandBuffer);

                    ScanTasks.Add(commandBuffer.Substring(1));
                    break;
                }

                case '4':
                {
                    KernelConnectors.Logger.WriteLine("[FileQueue] [Thr.Monitor] Изменение файла -> " + commandBuffer);

                    ScanTasks.Add(commandBuffer.Substring(1));
                    break;
                }
                }
            }
        }
コード例 #6
0
        static public bool DeleteFromStorage(int id)
        {
            var info = FoundVirusesManager.getInfo(id);

            if (VirusStorage.FileExists(info.fileInQuarantine))
            {
                VirusStorage.DeleteFile(info.fileInQuarantine);
                return(true);
            }

            return(false);
        }
コード例 #7
0
        /// <summary>
        /// Восстановить файл
        /// </summary>
        /// <param name="id"></param>
        private static void Restore(int id)
        {
            var virusInfo = FoundVirusesManager.getInfo(id);

            ScanTasks.RestoredFile = virusInfo.file;


            KernelConnectors.Logger.WriteLine("[API.Restore] Восстановление файла " + virusInfo.file, LoggerLib.LogLevel.OK);
            KernelConnectors.Logger.WriteLine("[API.Restore]   Удаление информации о вирусе из менеджера", LoggerLib.LogLevel.OK);
            FoundVirusesManager.Delete(id);

            KernelConnectors.Logger.WriteLine("[API.Restore]   Вызов восстановления файла у менеджера карантина", LoggerLib.LogLevel.OK);
            Quarantine.Quarantine.Restore(virusInfo.fileInQuarantine, virusInfo.file);
        }
コード例 #8
0
        private static void getAllVirusesInfo()
        {
            KernelConnectors.Api_Out_Sync.WaitOne();
            {
                foreach (VirusInfo virusInfo in FoundVirusesManager.getAllViruses())
                {
                    Out_writer.Write((byte)2);
                    Out_writer.Write(virusInfo.id);
                    Out_writer.Write(virusInfo.file);
                    Out_writer.Write(virusInfo.VirusId);
                    Out_writer.Write(virusInfo.inQuarantine);

                    Out_writer.Write(virusInfo.fileInQuarantine is null ? " " : virusInfo.fileInQuarantine);

                    Out_writer.Flush();
                }
            }
            KernelConnectors.Api_Out_Sync.ReleaseMutex();
        }
コード例 #9
0
        /// <summary>
        /// Удалить файл, где бы он не находился(в карантине/на диске)
        /// </summary>
        /// <param name="id"></param>
        private static void Delete(int id)
        {
            var virusInfo = FoundVirusesManager.getInfo(id);

            if (virusInfo.inQuarantine)
            {
                KernelConnectors.Logger.WriteLine($"[API] Удаление файла из карантина {virusInfo.fileInQuarantine}", LoggerLib.LogLevel.OK);
                Quarantine.Quarantine.DeleteFromStorage(id);
            }
            else
            {
                KernelConnectors.Logger.WriteLine($"[API] Удаление файла на жестком диске {virusInfo.file}", LoggerLib.LogLevel.OK);
                File.Delete(virusInfo.file);
            }

            KernelConnectors.Logger.WriteLine($"[API] Удаление из менеджера вирусов", LoggerLib.LogLevel.OK);

            FoundVirusesManager.Delete(id);
        }
コード例 #10
0
        /// <summary>
        /// Восстановить файл из карантина
        /// </summary>
        /// <param name="id"></param>
        static public void Restore(int id)
        {
            var virusInfo = FoundVirusesManager.getInfo(id);

            KernelConnectors.Logger.WriteLine("[Quarantine] Восстановление файла из " + virusInfo.fileInQuarantine + " в " + virusInfo.file);

            var CreatedFileStream = File.Create(virusInfo.file);
            var targetFileStream  = VirusStorage.OpenFile(virusInfo.fileInQuarantine, FileMode.Open);

            byte[] buffer = new byte[2048];

            while (targetFileStream.Read(buffer, 0, buffer.Length) > 0)
            {
                CreatedFileStream.Write(buffer, 0, buffer.Length);
            }

            CreatedFileStream.Close();
            targetFileStream.Close();
        }
コード例 #11
0
        private static void getVirusInfo(int id)
        {
            var virusInfo = FoundVirusesManager.getInfo(id);

            if (virusInfo == null)
            {
                return;
            }

            KernelConnectors.Api_Out_Sync.WaitOne();
            {
                Out_writer.Write((byte)2);
                Out_writer.Write(virusInfo.id);
                Out_writer.Write(virusInfo.file);
                Out_writer.Write(virusInfo.VirusId);
                Out_writer.Write(virusInfo.inQuarantine);

                Out_writer.Write(virusInfo.fileInQuarantine is null ? " " : virusInfo.fileInQuarantine);
                Out_writer.Flush();
            }
            KernelConnectors.Api_Out_Sync.ReleaseMutex();
        }
コード例 #12
0
        /// <summary>
        /// Переместить файл в карантин
        /// </summary>
        /// <param name="id"></param>
        private static void ToQuarantine(int id)
        {
            var virusInfo = FoundVirusesManager.getInfo(id);

            Quarantine.Quarantine.MoveVirusToQuarantine(id);
        }