Однако DeleteFile не срабатывает (GetLastError()==ERROR_SHARING_VIOLATION). Я думаю дело в том, что сообщение о том, что в директории появился новый файл, приходит в момент создания этого файла, а не в момент когда он полностью скопировался в эту директорию. Я хотел вместо DeleteFile вызывать CreateFile c параметром FILE_FLAG_DELETE_ON_CLOSE и сразу CloseHandle(hFile) (ну типа когда докопируешься, то сразу же удаляйся). Но CreateFile не проходит, т.к. файл открыт монопольно....
Как решить эту проблему?
В идеале мне нужно что бы ReadDirectoryChangesW сообщала об изменениях в директории в тот момент когда скопированный туда файл уже полностью лежит в этой самой директории. Но как это сделать? Может определить и описать функцию, которая передается последним параметром в ReadDirectoryChangesW (тип LPOVERLAPPED_COMPLETION_ROUTINE) и/или использовать ожидающие функции с окончанием Ex (и параметром bAlertable). Эта область WinApi для меня не знакома. Поэтому буду благодарен не только за подсказки в решении проблемы, но и ссылки на литературу (на русском) по этой теме.
Re: как только в папке появляется файл, его нужно тут же уда
[]
_>Однако DeleteFile не срабатывает (GetLastError()==ERROR_SHARING_VIOLATION). Я думаю дело в том, что сообщение о том, что в директории появился новый файл, приходит в момент создания этого файла, а не в момент когда он полностью скопировался в эту директорию. Я хотел вместо DeleteFile вызывать CreateFile c параметром FILE_FLAG_DELETE_ON_CLOSE и сразу CloseHandle(hFile) (ну типа когда докопируешься, то сразу же удаляйся). Но CreateFile не проходит, т.к. файл открыт монопольно.... _>Как решить эту проблему?
Решение в лоб: запускаем поток, в котором пытаемся открыть файл на запись. Как только это удалось — закрываем его, удаляем и вываливаемся из потока.
Re: как только в папке появляется файл, его нужно тут же уда
Здравствуйте, sandrey_, Вы писали:
_>Задача: если в папке появляется exe-файл, сразу же удалять его. _>Решаю так: пишу сервис под Win2000 и в нем использую ReadDirectoryChangesW:
.. _>Однако DeleteFile не срабатывает (GetLastError()==ERROR_SHARING_VIOLATION). Я думаю дело в том, что сообщение о том, что в директории появился новый файл, приходит в момент создания этого файла, а не в момент когда он полностью скопировался в эту директорию.
Скорее всего так и есть. Проблема несколько раз уже обсуждалась, насколько я помню ничего хорошего не придумали. Но метод всегда остаётся метод "опроса", т.е. можно вызывать DeleteFile в цикле с задержкой. Чтобы это не влияло на обнаружение следующего файла, можно породить отдельный поток.
Делай что должно, и будь что будет
Re: как только в папке появляется файл, его нужно тут же уда
Здравствуйте, sandrey_, Вы писали:
_>Задача: если в папке появляется exe-файл, сразу же удалять его. _>Решаю так: пишу сервис под Win2000 и в нем использую ReadDirectoryChangesW: _>
_>Однако DeleteFile не срабатывает (GetLastError()==ERROR_SHARING_VIOLATION). Я думаю дело в том, что сообщение о том, что в директории появился новый файл, приходит в момент создания этого файла, а не в момент когда он полностью скопировался в эту директорию. Я хотел вместо DeleteFile вызывать CreateFile c параметром FILE_FLAG_DELETE_ON_CLOSE и сразу CloseHandle(hFile) (ну типа когда докопируешься, то сразу же удаляйся). Но CreateFile не проходит, т.к. файл открыт монопольно.... _>Как решить эту проблему? _>В идеале мне нужно что бы ReadDirectoryChangesW сообщала об изменениях в директории в тот момент когда скопированный туда файл уже полностью лежит в этой самой директории. Но как это сделать? Может определить и описать функцию, которая передается последним параметром в ReadDirectoryChangesW (тип LPOVERLAPPED_COMPLETION_ROUTINE) и/или использовать ожидающие функции с окончанием Ex (и параметром bAlertable). Эта область WinApi для меня не знакома. Поэтому буду благодарен не только за подсказки в решении проблемы, но и ссылки на литературу (на русском) по этой теме.
Если речь идет о злобном GAIN, то слышал что помогает его попортить что бы не запускался — и всех делов
ICQ 156156278
Re[2]: как только в папке появляется файл, его нужно тут же
Здравствуйте, BlackHeretic, Вы писали:
BH>Если речь идет о злобном GAIN, то слышал что помогает его попортить что бы не запускался — и всех делов
Да нет, тут вот какая проблема: на сервере есть ресурс (папка) с полным доступом для ВСЕХ пользователей. Папка сделана для того что бы пользователи могли обмениваться файлами (в основном документами). Но злобные юзеры стали обмениваться фильмами, музыкой и игрушками. От фильмов избавились введением квотирования. А от игрушек (часто зараженных вирусами; особенно достал FunLove) избавиться решили таким вот образом (т.е. удалять любой exe-шник в этой папке сразу, как только он появляется)
Re[3]: как только в папке появляется файл, его нужно тут же
Здравствуйте, sandrey_, Вы писали:
_>Да нет, тут вот какая проблема: на сервере есть ресурс (папка) с полным доступом для ВСЕХ пользователей. Папка сделана для того что бы пользователи могли обмениваться файлами (в основном документами). Но злобные юзеры стали обмениваться фильмами, музыкой и игрушками. От фильмов избавились введением квотирования. А от игрушек (часто зараженных вирусами; особенно достал FunLove) избавиться решили таким вот образом (т.е. удалять любой exe-шник в этой папке сразу, как только он появляется)
Тупиковый путь. Во-первых можно заархивировать, во-вторых просто сменить расширение. Может проще попросить атнивирус сканировать эту папку (если такое возможно)?
Делай что должно, и будь что будет
Re[3]: как только в папке появляется файл, его нужно тут же
Здравствуйте, sandrey_, Вы писали:
_>Здравствуйте, BlackHeretic, Вы писали:
BH>>Если речь идет о злобном GAIN, то слышал что помогает его попортить что бы не запускался — и всех делов
_>Да нет, тут вот какая проблема: на сервере есть ресурс (папка) с полным доступом для ВСЕХ пользователей. Папка сделана для того что бы пользователи могли обмениваться файлами (в основном документами). Но злобные юзеры стали обмениваться фильмами, музыкой и игрушками. От фильмов избавились введением квотирования. А от игрушек (часто зараженных вирусами; особенно достал FunLove) избавиться решили таким вот образом (т.е. удалять любой exe-шник в этой папке сразу, как только он появляется)
Если юзеры не чайники алюминиевые — фишку просекут и начнут зипповать — мы так обходим почтовый файрвол на нашей фирме (упаси господь — не игрушки пересылаем — просто ломает все время через FTP работать).
На другой фирме админы это просекли и стали вскрывать зипы и проверять содержимое — кажется последним достижением тамошних жителей стала зипповка с последующим переименованием в BMP
Так что не заморачивайся
Хотя! Опять же — по моему идея не плохая — ты их не удаляй — ты их погань
А насчет ошибки — запусти отдельный процесс — ну поспи чуток — пока файл копируется, а потом как только так сразу. Где нить в важную область пропиши мусор и делов то
ICQ 156156278
Re[4]: как только в папке появляется файл, его нужно тут же
Здравствуйте, SergH, Вы писали:
SH>Тупиковый путь. Во-первых можно заархивировать, во-вторых просто сменить расширение. Может проще попросить атнивирус сканировать эту папку (если такое возможно)?
Все правильно. Но как защита от дурака сойдет. Это во-первых. А во-вторых это спасет от распространения вируса: сейчас он распростаняется как — юзер запустил на своем компе зараженную программу, программа заразила все exe (именно exe) файлы которые только смогла, включая те, что были в общедоступной папке, а из общедоступной папки другие юзеры взяли зараженные exe-шники и запустили их. А будет — заразился юзер, но не заразил общедоступный ресурс — лавинного распространения вируса нет.
Вешали на папку Касперского — сканирует-то он только эту папку, а тормозит весь винт на сервере
Re[2]: как только в папке появляется файл, его нужно тут же
Здравствуйте, SergH, Вы писали:
SH>Скорее всего так и есть. Проблема несколько раз уже обсуждалась, насколько я помню ничего хорошего не придумали.
жаль...
SH>Но метод всегда остаётся метод "опроса", т.е. можно вызывать DeleteFile в цикле с задержкой. Чтобы это не влияло на обнаружение следующего файла, можно породить отдельный поток.
Скорее всего так и сделаю
Спасибо.
Re[4]: как только в папке появляется файл, его нужно тут же
По хорошему конечно это не сильно поможет в борьбе с вирусоми. Пока есть много чайников, которые могут приносить на комп (с дискет, из инета) и запускать на нем файлы, проблемы всегда останутся. Как наиболее радикальное решение — на компы служащих ставится антивирусная прога с мониторингом (файлов и приход. почты), обновление у нее настраивается автомат. с какого-нибудь сервера (иначе выброшенные деньги, сами юзеры ходить за обновлениями не будут). Так помойму делают в большинстве крупных компаниях.
Re: как только в папке появляется файл, его нужно тут же уда
Здравствуйте, Slava Antonov, Вы писали:
SA>Можно сделать немного по другому — не давать создавать этот файл. SA>Раз у нас сервис, то сами создаем файл с этим именем с монопольным SA>доступом.
"с этим именем"? Но ведь неизвестно заранее какой файл появится в папке.
Re[3]: как только в папке появляется файл, его нужно тут же
sandrey_ wrote: > > Здравствуйте, BlackHeretic, Вы писали: > > BH>Если речь идет о злобном GAIN, то слышал что помогает его попортить что бы не запускался — и всех делов > > Да нет, тут вот какая проблема: на сервере есть ресурс (папка) с полным доступом для ВСЕХ пользователей. Папка сделана для того что бы пользователи могли обмениваться файлами (в основном документами). Но злобные юзеры стали обмениваться фильмами, музыкой и игрушками. От фильмов избавились введением квотирования. А от игрушек (часто зараженных вирусами; особенно достал FunLove) избавиться решили таким вот образом (т.е. удалять любой exe-шник в этой папке сразу, как только он появляется)
Если решить как хочется не получится, могу предложить другую идею. Не
удалять, а менять ему права доступа (я полагаю, там NTFS) так, чтобы его
эти юзеры читать не могли. . А удалять можно вручную раз в день.
--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[3]: как только в папке появляется файл, его нужно тут же
H e l l o, sandrey_!
SA>> Можно сделать немного по другому — не давать создавать этот SA>> файл. Раз у нас сервис, то сами создаем файл с этим именем с SA>> монопольным доступом.
s> "с этим именем"? Но ведь неизвестно заранее какой файл появится в s> папке.
Про это вы в постановке задачи не говорили
--
Всего хорошего, Слава. (http://slava.users.otts.ru)
-= Мое варенье, хочу — ем, хочу — на асфальт мажу! =-