#c# #windows #service #virtual-drive
#c# #Windows #Обслуживание #виртуальный диск
Вопрос:
Мои работодатели попросили меня найти способ создать службу, которая запускается при подключении виртуального диска и проверяет, пытается ли пользователь или посторонний процесс получить к нему доступ, в случае, если это произойдет, служба должна уведомить программное обеспечение, ответственное за управление диском, и отключить его. Это потому, что они не хотят, чтобы никто не возился с файлами, которые находятся на диске.
Я попытался найти несколько вопросов здесь, в stackoverflow, и то, что я нашел, было: — заблокируйте файлы в DirectoryInfo диска; — Создайте драйвер с минифильтром, который проверяет, осуществляется ли доступ к файлу;
Но ни один из них действительно не отвечает на мой вопрос.
У меня есть код для создания и монтирования диска и для размонтирования диска, у меня также есть код для блокировки файлов с помощью DirectoryInfo, но я не знаю, как поступить
Может кто-нибудь сказать мне, возможно ли то, чего я пытаюсь достичь, и если да, то какой путь я должен выбрать для этого!
Комментарии:
1. Мини-фильтр звучит как правильный путь. Что бы я сделал, так это чтобы минифильтр регистрировал любые обращения. Затем в вашей службе выполните поиск изменений в файле журнала. Я не знаю о c #, но в других языках есть библиотеки с перехватами ядра для обнаружения изменений файлов (что означает отсутствие условия гонки на случай, если другой процесс попытается изменить файл журнала, чтобы замести следы).
Ответ №1:
Правильное решение — использовать драйвер фильтра файловой системы, который будет проверять доступ к диску синхронно (по мере поступления запроса) и блокировать запросы или выполнять любые другие действия. Это может потребовать некоторой работы в режиме ядра, или можно использовать такой компонент, как CBFS Filter (отказ от ответственности — мы поддерживаем этот продукт), который предоставляет вам как предопределенные правила, так и возможность динамически обрабатывать все запросы в пользовательском режиме (через события), и с его помощью ваша задача решается буквально менее чем за час кодирования.
Драйвер режима ядра может получить учетные данные (имя, маркер безопасности, PID) процесса, который открывает файл или выполняет операцию файловой системы, и действовать соответствующим образом. В CBFS Filter эта информация доступна в обработчиках событий, поэтому приложение может реагировать на нее.