Вопрос по .net, visual-c++, windows – Перехватить FIleSytemCall для удаления

0

Есть ли способ обнаружить удаление файла до того, как Windows выполнит удаление? Я обнаружил класс FileSystemWatcher, но событие возникает только после выполнения действия удаления, но я хочу перехватить действие удаления после того, как пользователь / процесс решит удалить его. Вы можете следить за таблицей файловой системы, но ищите лучший подход. Спасибо за вашу помощь.

Сделал это, подключив API-интерфейс NtSetFileInformation с помощью библиотеки mhook. Работает как шарм. Спасибо, парни vgeta

Ваш Ответ

3   ответа
1

что самый простой способ - использовать ловушку, чтобы получить уведомление (и в конечном итоге остановить) процесс. Это не может быть сделано в .NET, поэтому вы должныDllImport Много структур и мало функций для P / Invoke.

Давайте начнем вашу работу сNtSetFileInformation (недокументированная) функция. Это функция, вызываемая чем-либо еще, когда файл должен быть удален (сFileDispositionInformation состав)

Теперь проблема в том, как подключить эту функцию (удачи, это не легко). Хорошим выбором может быть использование Microsoft Detours. Посмотрите наЭта стать для примера. Его проблема в том, что это не бесплатно. Альтернативное решение (по разумной цене и с интерфейсом .NET) - это Deviare но я никогда не пробовал даже их бесплатную версию, поэтому не знаю, насколько это хорошо. Если кто-то знает хороший инструмент перехвата ...

Спасибо, я попробую перехват API и надеюсь, что смогу это сделать vgeta
Спасибо, на самом деле я не хочу останавливать процесс удаления файла. Я хочу сделать защищенную копию файла и разрешить удаление. vgeta
@ Gopikanna это тот же (сложный) способ. Большая проблема в Обнаружить когда кто-то / что-то пытается удалить файл (разные функции используют разные методы, NtSetFileInformation - самый глубокий). Когда ты там, что делать, это (добро) тривиально. Adriano Repetti
@ Gopikanna небольшой совет для сложной задачи: начните со связанной статьи о CodeProject, это хорошо (если вы будете использовать объезд). Adriano Repetti
1

мендую, чтобы, если вы не знаете ответ, вам, вероятно, не следует его делать.

http: //msdn.microsoft.com/en-us/library/windows/hardware/gg462968.asp

Спасибо, но не ищу решения на уровне водителя. Написание драйвера для меня неосуществимо :). Я искал решение на уровне API. vgeta
Если вы хотите ПРЕДОТВРАТИТЬ удаление, просто держите открытый дескриптор (открытый с доступом FILE_READ_ATTRIBUTES), но без FILE_SHARE_DELETE. Узнать, что кто-то пытался удалить его, сложнее. Ben
Я могу быть совершенно неправ, возможно ли запустить службу, которая блокирует файл, чтобы всякий раз, когда что-то пытается его удалить, Мой сервис может это выяснить. vgeta
Этот вид низкоуровневой хитрости файлов действительно принадлежит драйверу фильтра, а не приложению. (Например, вы можете повесить другое приложение, выполнивSleep(INFINITE) в вашем коде «последней копии». Это становится проблемой безопасности, если другое приложение работает в другом контексте безопасности.) Возможно, вы можете просто выкопать старую копию файла из базы данных моментальных снимков тома. Raymond Chen
@ Gopikanna, вы смотрели службы теневого копирования (VSS)? Изменить: как Рэймонд Чен предлагает ... Ben
0

ICopyHook интерфейс.

http: //msdn.microsoft.com/en-us/library/windows/desktop/bb776049%28v=vs.85%29.asp

В CopyCallback метод использования FO_DELETE в параметре wFunc, чтобы указать операцию удаления.

Недостаток Предотвращать удаление только в оболочке Windows.

Похожие вопросы