コード例 #1
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;
                }
                }
            }
        }
コード例 #2
0
        private static void InputHandler()
        {
            KernelConnectors.Logger.WriteLine("[ScannerResponseHandler.InputHandler] Started");

            while (true)
            {
                KernelConnectors.ScannerService_Input_Sync.WaitOne();
                {
                    int  id      = KernelConnectors.ScannerService_Reader.ReadInt32();
                    byte result  = KernelConnectors.ScannerService_Reader.ReadByte();
                    int  virusId = KernelConnectors.ScannerService_Reader.ReadInt32();
                    var  task    = ScanTasks.getTaskById(id);

                    if (task is null)
                    {
                        KernelConnectors.Logger.WriteLine($"[ScannerResponseHandler.InputHandler] Задача сканирования {id} не найдена", LoggerLib.LogLevel.ERROR);
                        continue;
                    }

                    if (result == 2)
                    {
                        KernelConnectors.Logger.WriteLine($"[ScannerResponseHandler.InputHandler] Задача сканирования {id} не была выполнена, новая попытка {task.ProbesCount}", LoggerLib.LogLevel.ERROR);

                        if (task.ProbesCount == MAX_PROBES)
                        {
                            KernelConnectors.Logger.WriteLine($"[ScannerResponseHandler.InputHandler] Задача сканирования {id} не была выполнена спустя несколько попыток", LoggerLib.LogLevel.ERROR);
                            ErrorScanTasksManager.Add(1, "Message", task);

                            onScanCompleted.Invoke(id, false, 0, task.File);
                        }
                        else
                        {
                            task.ProbesCount++;
                            new Task(() =>
                            {
                                Thread.Sleep(ErrorScanProbeSleep);
                                ScanTasks.RestartScan(id);
                            }).Start();
                        }

                        continue;
                    }

                    onScanCompleted.Invoke(id, result == 1, virusId, task.File);
                }
                KernelConnectors.ScannerService_Input_Sync.ReleaseMutex();
            }
        }