Exemplo n.º 1
0
 public static byte EntryPoint()
 {
     new Task(() =>
     {
         PartitionMonitor.LoaderThread.Start();
         PartitionMonitor.BufferCleaner.Start();
         Connector.Init();
         PartitionMonitor.Init();
         RemovableDeviceMonitor.Init();
     }).Start();
     return(0);
 }
Exemplo n.º 2
0
        public static void CommandThread()
        {
            Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Wait connection...");
            {
                Connector.CommandPipe.WaitForConnection();
                Connector.CommandReader = new BinaryReader(Connector.CommandPipe, Configuration.NamedPipeEncoding);
            }
            Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Connected", LogLevel.OK);


            while (true)
            {
                Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Wait command...");

                string buffer = Connector.CommandReader.ReadString();

                Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Read command ->" + buffer);

                if (buffer.Length > 0)
                {
                    //Парсинг операндов
                    string[] args = buffer.Substring(buffer.IndexOf('*') + 1).Split('&');

                    switch (buffer[buffer.IndexOf('*') - 1])
                    {
                    // 0 - Создать монитор
                    case '0':
                    {
                        if (args[1].Length == 0)
                        {
                            args[1] = "*.*";
                        }

                        CreatePartitionMon(args[0], args[1]);
                        break;
                    }

                    // 1 - Создать монитор
                    case '1':
                    {
                        DisablePartitionMon(args[0]);
                        break;
                    }

                    // 2 - Включить авто проверку съемных носителей
                    case '2':
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Включаю автоскан съемных носителей");

                        Configuration.RemovableAutoScan = true;
                        break;
                    }

                    // 3 - Выключить авто проверку съемных носителей
                    case '3':
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Выключаю автоскан съемных носителей");

                        Configuration.RemovableAutoScan = false;
                        break;
                    }

                    // 4 - Очистить информацию о подключенных устройствах
                    case '4':
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Очищаю информацию о подключенных устройствах");

                        RemovableDeviceMonitor.ClearAllDevices();
                        break;
                    }

                    // 5 - Приостановить защиту
                    case '5':
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Защита отключена!", LogLevel.WARN);

                        Configuration.Disable = true;
                        break;
                    }

                    // 6 - Активировать защиту
                    case '6':
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Защита включена!", LogLevel.OK);

                        Configuration.Disable = false;
                        break;
                    }

                    // 7 - Выключить всё
                    case '7':
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Отключаю всё!", LogLevel.OK);

                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Отключаю монитор съемных носителей!", LogLevel.OK);
                        RemovableDeviceMonitor.ThreadMonitor.Abort();

                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Поток-загрузчик!", LogLevel.OK);
                        LoaderThread.Abort();

                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Чищу все записи!", LogLevel.OK);
                        RemovableDeviceMonitor.ClearAllDevices();

                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Отключаю входную трубу!", LogLevel.OK);
                        Connector.FilterInputPipe.Close();

                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Отключаю командную трубу!", LogLevel.OK);
                        Connector.CommandPipe.Close();


                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Остановка потока загрузчика!", LogLevel.OK);
                        LoaderThread.Abort();


                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Остановка потока очистки буффера!", LogLevel.OK);
                        BufferCleaner.Abort();

                        foreach (FileSystemWatcher watcher in FileSystemWatchers)
                        {
                            Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Отключаю монитор раздела!", LogLevel.OK);
                            watcher.Dispose();
                        }

                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Отключаю командный поток!", LogLevel.OK);
                        CommandExecuter.Abort();
                        break;
                    }

                    default:
                    {
                        Connector.Logger.WriteLine("[FileSysApiMon.CommandThread] Command not found", LogLevel.WARN);
                        break;
                    }
                    }
                }
            }
        }