public static byte EntryPoint() { new Task(() => { PartitionMonitor.LoaderThread.Start(); PartitionMonitor.BufferCleaner.Start(); Connector.Init(); PartitionMonitor.Init(); RemovableDeviceMonitor.Init(); }).Start(); return(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; } } } } }