Конференция "WinAPI" » Перехват удаления файла с целью предварительного его копирования [D7]
 
  • JohnJ (07.09.12 04:19) [0]
    Здравствуйте! Есть задача сделать "сетевую корзину": эмуляцию корзины windows. Дело в том, что файлы, лежащие на сетевых дисках, не отправляются в корзину при удалении.
    Сначала решил следить с помощью ReadDirectoryChangesW, и эта функция хорошо справляется, но не позволяет приостановить удаление, чтобы сделать копию.
    Решил, что значит при запросе на удаление нужно перехватывать этот запрос на сервере, копировать файл в указанную папку-корзину, а затем уже выполнять удаление файла. Уже что только не перепробовал. И отсюда функции пробовал http://www.wasm.ru/article.php?article=apihook_2, чтобы перехватить DeleteFileW и CreateFileW - нет реакции. Так же пробовал перехватить ZwCreateFile и ZwDeleteFile через Deviare... из ntdll. Скачал Deviare C# Console, она перехватывает CreateFileW при удалении файла из Total Commander, но из проводника - молчок (хотя может сама фильтрует - не знаю). Что вы можете посоветовать?

    Подумал, что если не получится перехватить, то можно попытаться восстановить только что удалённый файл. Но это не будет работать надёжным способом, к тому же восстановление файла из удалённых - это не меньшая головная боль, а программ для восстановления с поддержкой командной строки (чтобы использовать через Delphi) я не знаю.

    У меня windows 7, программа должна работать на Windows 2003 Server. Пишу в Turbo Delphi 2006.
  • Anatoly Podgoretsky © (07.09.12 07:02) [1]
    > JohnJ  (07.09.2012 04:19:00)  [0]

    Windows 2003 Server поддерживает теневое копирование и сохранение версий
    файла, а не только удаление.
    Вряд ли самострой получится лучше или хотя бы близким к системе.
  • JohnJ (07.09.12 13:59) [2]
    Теневое копирование не очень подходит. Там уже есть ежесуточное резервное копирование.
    Пока пришли к выводу, что лучшим выходом будет самому организовать временное хранилище изменяющихся в процессе работы файлов (отслеживать так же с помощью ReadDirectoryChangesW). А в сетевую корзину перемещать оттуда. Но это решение всё-равно не на 100% соответствует первоначальной задумке. Так что если у кого-то появятся идеи или есть примеры кода, прошу помочь.
  • Rouse_ © (07.09.12 15:34) [3]
    SHFileOperation попробуй
  • Anatoly Podgoretsky © (07.09.12 19:02) [4]
    > JohnJ  (07.09.2012 13:59:02)  [2]

    Наоборот отлично, можно вернуться именно на нужную версию.
    И там применен отличный механизм, без лишнего копирования, а только разницу,
    для тебя все выглядит как целый файл.
 
Конференция "WinAPI" » Перехват удаления файла с целью предварительного его копирования [D7]
Есть новые Нет новых   [134430   +2][b:0][p:0]