Интересует, как можно организовать корзину на сервере, в которую будут попадать файлы, удаляемые из сети. Те функции, которые есть в Винде , насколько я понял, позволяют получить уведомление о том что файл уже удален, а мне нужно перенести файл куда-то до удаления.
Если ты имеешь ввиду вместо перемещения файлов в локалькую корзину, переносить их в "корзину" на сервере, то это очень просто реализуеться: Перехват удаления файла. В процедуре перехвата ты можеш зделать фильтр. Когда нашел файл нужный для переноса, просто вместо оригинальной функций вызываешь функцию для переноса файла на сервер, и возвращаешь STATUS_SUCCESS, если файл можна удалять дергаешь оригинальную функцию.
MegaZu Во-первых, насколько я знаю, если удаляется с сетевой папки, то даже в локальную корзину не поступает. Ну да ладно, это разрешимо перехватом удаления файла на клиенте. Но вот с перехватом удаления файла на сервере есть проблемы. Как я понимаю, работа с файлами по сети на сервере реализована через ntoskrnl.exe. (В этом легко убедиться, если посмотреть, кто слушает порты netbios). В таком случае даже хуканье NtCreateFile не поможет (т.к. эта ф-я экспортируется из ntoskrnl.exe). Но даже если и поможет, работа с нулевым кольцом чревата BSOD'ом, поэтому мне это не нравится. Кстати, даже утилиты Руссиновича filemon и fundelete не хукают файлы, измененные по сети.
Я незнаю как работает механизм удаления с сетевых папок. Когда ты удаляешь файли , ОСька вряд ли ,сначала, знает откуда файлы. Я думаю что она пытается удалять их как локальние. А конечная функция удаления чекает кого она будет удалять, и либо мувает их в корзину либо удаляет на всегда. У меня сейчас под рукой нету сайса чтоб проверить. ЗЫ. ИМХО))
Может, кто знает стабильный драйвер-фильтр файловой системы с исходниками? Только чтобы он работал с файлами, изменяемыми из сети!
кстати говоря, хук на ZwDeleteFile в случае с удалением файлов по сети не пройдет (в смысле ничего не отловит). можете проверить.
утверждают (сам не знаю, не проверял еще) что нормально работает filespy из MICROSOFT.WINDOWS.SERVER.V2003.IFS.DDK-ISO.LeDreactor.iso (http://delphikingdom.com/asp/answer.asp?IDAnswer=38185)
Folk Acid Если на сервере удаляються файлы, то это делает сам сервер по запросу клиента. Посути, клиент обращаеться к редиректору, который уже в свою очередь к драйверу файловой системы сервера. Это упрощеная схема. Более детально в книге Руссиновича. Утилита спокойно должна ловить файлы, удаляемые компом, где она запущена. Ведь файлы удаляет именно он по запросу клиентов. http://www.sysinternals.com/Utilities/Fundelete.html Или я не понял сути вопросса?
Видимо я не понял сути ? Тогда второй вариант. Удалить файл можно двумя путями: 1.ZwDeleteFile 2.ZwSetInformationFile передав в 5-ом параметре информационный класс FileDispositionInformation==13. Проблема в том, как определить сетевой файл. Если используется UNC имя то дальше работает символьная ссылка… короче MUP с редиректором разруливают ситуацию. Другое дело когда обращение идёт к подключённому сетевому диску. Тогда нужно пройтись по объектах каталога \?? и определить символьную ссылку на что-то типа \Device\LanmanRedirector\ТЫРЫ-ПЫРЫ. Если нашли – значит сетевой диск, иначе локальный (конечно это можно сделать и попроще). Извини, но всё это очень упрощённо. Пересказывать книги я не буду. В любом случае, если не найдёшь готовых утилит то хук-драйвер, как не крутись, придётся писать. Для этого понадобиться куча макулатуры, в которой на первом месте будет лежать «Внутреннее устройство Windows2000» Руссиновича и Соломона, а также книга Гери Неббета «Справочник по базовым функциям API Windows NT/2000»
в плане "нормально", все что мне попадалось отвечают этому требованию. просто к примеру Filemon от Руссовича, не стоит брать за основу, по крайней мере так утверждают "великие" , но для саомобразования, оно самое то, с чего бы стоило начинать.
slow Ну ты шустрый На дельфикингдом - это я был DelExe Перехватить на клиенте - не проблема. Но меня это не устраивает. На сервере - нужно. Сейчас осталась одна проблема - скрестить filespy из IFS и Fundelete Кстати, что за книжка Руссиновича и Соломона? Это не она? Там ничего по программированию нет, только общий трендеж.
LuckyDevil „Кстати, даже утилиты Руссиновича filemon и fundelete не хукают файлы, измененные по сети“ ну для этого всего-то навсего надо было Руссвичу добавить ланредерект и все. Я имею в виду что не хукают то что из сети к нам ползёт, а не то что мы меняем в сети
Folk Acid, что именно ты понимаешь под "к нам ползёт", быть может я не правильно тебя понял. вообще-то твой Filemon, должен тебе показывать, файловую активность в независимости от того, по сети к нему доступ але локально, это точно и проверено 100 раз. в такой раскладке точно покажет: \\yourServer\c$\foo.txt
Захожу удаленно со своей тачки на другую, с нее открываю \\мой_комп\c$\autoexec.bat - Sysinternals Filemon ничего не показывает, IFS FileSpy показывает
Folk Acid, вот они грабли, отсюда делай вывод, что FileMon, это игрушка для начинающих. Сорри, сам то я тоже Filespy просматривал. Как бы там ни было, а файловую активность ты наблюдаешь, именно это тебе и нужно было
LuckyDevil только в осле ed2k://|file|[MICROSOFT.WINDOWS.SERVER.2003.IFS.DDK].MICROSOFT.WINDOWS .SERVER.V2003.IFS.DDK-ISO.LeDreactor.bin|218879472|19A30309C3FD2CB7731 1E66794E2DC32|/ 200 метров