MiniFilter и Protector/Rejector (ObCallback) в одном драйвере с управлением через C#
В продолжение этого поста.
Предлагаю вашему внимаю мою поделку основанную на MiniFilter, ObCallback и Avalonia
Можно грабить корованы защищать от закрытия, регулировать доступ к файлам и запрещать запускать процессы.
C# код для управления драйвером:
using System; using System.Diagnostics; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Threading; using SharpMiniFilter.Driver.MiniFilter; using SharpMiniFilter.Driver.Protector; namespace SharpMiniFilter.Protected; public partial class MainWindow : Window { private bool allowClose = false; public MainWindow() { InitializeComponent(); this.Closing += (sender, args) => { args.Cancel = !allowClose; if (!args.Cancel) { ProtectorClient.ReplaceProtectList(Array.Empty<string>()); ProtectorClient.ReplaceRejectList(Array.Empty<string>()); MiniFilterClient.CloseConnection(); MiniFilterClient.DriverFilter -= DriverClientOnDriverFilter; } }; MiniFilterClient.DriverFilter += DriverClientOnDriverFilter; if (MiniFilterClient.Connect()) { ProtectorClient.ReplaceProtectList(new[] { $"PID:{Process.GetCurrentProcess().Id}" }); ProtectorClient.ReplaceRejectList(new[] { "*cmd.exe" }); Log_TextBox.Text += "Added current process to protection list." + Environment.NewLine; Log_TextBox.Text += "Added cmd.exe to reject list." + Environment.NewLine; } else { Log_TextBox.Text += "Connection to driver failed." + Environment.NewLine; MiniFilterClient.DriverFilter -= DriverClientOnDriverFilter; } } private void DriverClientOnDriverFilter(MinifilterEventArgs e) { Dispatcher.UIThread.Invoke(() => { if (e.Path.Contains("test.txt")) { if (!Process.GetProcessById((int)e.ProcessId).ProcessName.ToLower().Contains("notepad")) { e.SetHandled(true); Log_TextBox.Text += "Minifilter: test.txt blocked" + Environment.NewLine; } else { e.SetHandled(false); Log_TextBox.Text += "Minifilter: test.txt not blocked for notepad.exe" + Environment.NewLine; } } }); } private void Button_OnClick(object? sender, RoutedEventArgs e) { allowClose = true; this.Close(); } }
Бонусом - создание .cab файла для отправки в Microsoft на сертификацию при Release сборке.
Ссылка на репозиторий.
P.S. Если вам будет интересно, а у меня силы и карма - то расскажу, что там и как в отдельной статье. А теперь и ответ на всех мучающий вопрос: "Почему пингвин пошёл в горы?"












