Как с помощью Win Api поймать ивент на событие CopyFile
От: gorr.ka  
Дата: 09.06.09 20:00
Оценка:
Привет Всем,

поискал по Инету и Тут, быстро найти не удалось — на такой вопрос:

Как с помощью Win Api поймать ивент на событие CopyFile, Rename...?

Вернее, я хочу отловить событие на создании файла, НЕ проверка на уже созданном?
Проверить нужно только по имени. Также подлежат отлову Rename, Delate.

Like action before...

Спасибо
Re: Как с помощью Win Api поймать ивент на событие CopyFile
От: x64 Россия  
Дата: 09.06.09 20:05
Оценка: 10 (1) +1 -1
GK>Как с помощью Win Api поймать ивент на событие CopyFile, Rename...?

Писать драйвер файловый фильтр. Тебе сюда или сюда, затем сюда.
Re[2]: Как с помощью Win Api поймать ивент на событие CopyFi
От: CEMb  
Дата: 10.06.09 02:55
Оценка: -2
Здравствуйте, x64, Вы писали:

GK>>Как с помощью Win Api поймать ивент на событие CopyFile, Rename...?


x64>Писать драйвер файловый фильтр. Тебе сюда или сюда, затем сюда.


У тебя, я смотрю, на все проблемы решение — написать драйвер

С помощью Win Api это делается глобальным перехватом вызова функций CopyFile, Rename. Внедряемся в чужой процесс, перебираем все модули, прицепленные к нему, у них в таблице импорта меняем указатели CopyFile, Rename на свои.
Подробная статья была на rsdn вроде тут
Re[3]: Как с помощью Win Api поймать ивент на событие CopyFi
От: x64 Россия  
Дата: 10.06.09 03:16
Оценка:
CEM>У тебя, я смотрю, на все проблемы решение — написать драйвер

Ты не прав, я не сторонник решений "из пушки по воробьям". И в данном случае это единственное грамотное решение. Лучше не спорь, бесполезно.

CEM>С помощью Win Api это делается глобальным перехватом вызова функций CopyFile, Rename. Внедряемся в чужой процесс, перебираем все модули, прицепленные к нему, у них в таблице импорта меняем указатели CopyFile, Rename на свои.


Хуки это, строго говоря, недокументированный метод. Не следует использовать их без крайней нужды. Я допускаю, что крайняя нужда имеет место быть в данном случае, но из первого сообщения автора этого не следует.
Re[3]: Как с помощью Win Api поймать ивент на событие CopyFi
От: IID Россия  
Дата: 10.06.09 06:54
Оценка: 16 (3) +3
Здравствуйте, CEMb, Вы писали:

CEM>С помощью Win Api это делается глобальным перехватом вызова функций CopyFile, Rename. Внедряемся в чужой процесс, перебираем все модули, прицепленные к нему, у них в таблице импорта меняем указатели CopyFile, Rename на свои.


Хуки это ещё хуже (в порядке убывания важности):
1) ошибка в фильтре не менее (а даже более) фатальна. Хинт: при ошибке в драйвере получишь BSOD, фильтр же может безнаказанно портить работу системы сколь угодно долго.
2) такой фильтр не выгрузить.
3) целостность UM процессов. Любая нормальная проактивная защита мигом пометит все хукнутые процессы как изменившиеся. Отрубит им сеть и напугает пользователя шквалом запросов (вполне обосновано, кстати).
4) на x64 системах 32битный фильтр идёт лесом, придётся писать две штуки, и ставить их ОБЕ в систему.
5) сложнее делать передачу данных между экземплярами фильтра.
kalsarikännit
Re[4]: Как с помощью Win Api поймать ивент на событие CopyFi
От: IID Россия  
Дата: 10.06.09 07:00
Оценка: 10 (1) +2
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, CEMb, Вы писали:


CEM>>С помощью Win Api это делается глобальным перехватом вызова функций CopyFile, Rename. Внедряемся в чужой процесс, перебираем все модули, прицепленные к нему, у них в таблице импорта меняем указатели CopyFile, Rename на свои.


IID>Хуки это ещё хуже (в порядке убывания важности):

IID>1) ошибка в фильтре не менее (а даже более) фатальна. Хинт: при ошибке в драйвере получишь BSOD, фильтр же может безнаказанно портить работу системы сколь угодно долго.
IID>2) такой фильтр не выгрузить.
IID>3) целостность UM процессов. Любая нормальная проактивная защита мигом пометит все хукнутые процессы как изменившиеся. Отрубит им сеть и напугает пользователя шквалом запросов (вполне обосновано, кстати).
IID>4) на x64 системах 32битный фильтр идёт лесом, придётся писать две штуки, и ставить их ОБЕ в систему.
IID>5) сложнее делать передачу данных между экземплярами фильтра.

Ещё важную штуку забыл
— хуки придётся ставить на ntdll.dll, иначе часть вызовов пропустишь.
— создание файлов драйверами не перехватишь.
— вредный процесс может вызвать шлюз ядра вообще напрямую. И будет UM фильтр грустно по... покуривать в сторонке.
kalsarikännit
Re[4]: Как с помощью Win Api поймать ивент на событие CopyFi
От: CEMb  
Дата: 10.06.09 07:15
Оценка: +1
Здравствуйте, x64, IID, Вы писали:

CEM>>У тебя, я смотрю, на все проблемы решение — написать драйвер


x64>Ты не прав, я не сторонник решений "из пушки по воробьям". И в данном случае это единственное грамотное решение.

Конечно, писать и ставить драйвер на машину только из-за отлова пары вызовов — это не "из пушки по воробьям".

x64>Хуки это, строго говоря, недокументированный метод. Не следует использовать их без крайней нужды. Я допускаю, что крайняя нужда имеет место быть в данном случае, но из первого сообщения автора этого не следует.

1. Я про хуки не говорил.
2. Хуки — в msdn описаны подробно.
0. Согласен, хуки — это крайний метод. Но драйвер под эту задачу писать... это слишком.

IID>— хуки придётся ставить на ntdll.dll, иначе часть вызовов пропустишь.

IID>— создание файлов драйверами не перехватишь.
IID>— вредный процесс может вызвать шлюз ядра вообще напрямую. И будет UM фильтр грустно по... покуривать в сторонке.

У человека вопрос был — перехватить пару конкретных вызовов, а не написать мега-монитор файлов

Я предложил и дал ссылку на самое простое решение в 15 строчек, реализуемое в одном проекте.
Re[5]: Как с помощью Win Api поймать ивент на событие CopyFi
От: x64 Россия  
Дата: 10.06.09 07:35
Оценка:
Я же предупреждал — не надо спорить...

CEM>Конечно, писать и ставить драйвер на машину только из-за отлова пары вызовов — это не "из пушки по воробьям".


Именно так, когда заходит речь о файловой (и не только) фильтрации, то здесь простых решений не бывает, запомните это. Это не "как два пальца...", далеко не так...

CEM>1. Я про хуки не говорил.


А, это мне значит показалось...

CEM>2. Хуки — в msdn описаны подробно.


Да-а-а?? Ну найдёшь — я тебе оценку поставлю.

CEM>0. Согласен, хуки — это крайний метод. Но драйвер под эту задачу писать... это слишком.


По твоей логике получается, что автору можно сразу убиться об стенку, ибо кроме хуков и фильтров других решений просто нет.

CEM>У человека вопрос был — перехватить пару конкретных вызовов, а не написать мега-монитор файлов

CEM>Я предложил и дал ссылку на самое простое решение в 15 строчек, реализуемое в одном проекте.

Ещё раз: простых решений здесь не бывает, надёжность предложенного тобой решения равна чуть более чем нулю.
Re: Уведомлялки
От: x64 Россия  
Дата: 10.06.09 07:38
Оценка: +2
А вообще, если сверхвысокая точность не нужна, и чтобы без наворотов, тогда посмотри вот эти две:

FindFirstChangeNotification()
ReadDirectoryChangesW()
Re[4]: Как с помощью Win Api поймать ивент на событие CopyFi
От: gorr.ka  
Дата: 10.06.09 16:09
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, CEMb, Вы писали:


CEM>>С помощью Win Api это делается глобальным перехватом вызова функций CopyFile, Rename. Внедряемся в чужой процесс, перебираем все модули, прицепленные к нему, у них в таблице импорта меняем указатели CopyFile, Rename на свои.


IID>Хуки это ещё хуже (в порядке убывания важности):

IID>1) ошибка в фильтре не менее (а даже более) фатальна. Хинт: при ошибке в драйвере получишь BSOD, фильтр же может безнаказанно портить работу системы сколь угодно долго.
IID>2) такой фильтр не выгрузить.
IID>3) целостность UM процессов. Любая нормальная проактивная защита мигом пометит все хукнутые процессы как изменившиеся. Отрубит им сеть и напугает пользователя шквалом запросов (вполне обосновано, кстати).
IID>4) на x64 системах 32битный фильтр идёт лесом, придётся писать две штуки, и ставить их ОБЕ в систему.
IID>5) сложнее делать передачу данных между экземплярами фильтра.

Спасибо за участие! Очень полезный спор!

Можно конечно перебором по всем Окнам и хыкать. Вот если файл пишется по сети?

Из того что я "нарыл" в инете, предлагают пользовать ЭТО.

Кто нибудь с таким монстром пробовал хукать?

http://www.codeproject.com/KB/DLL/funapihook.aspx
Re[2]: Уведомлялки
От: gorr.ka  
Дата: 10.06.09 16:56
Оценка:
Здравствуйте, x64, Вы писали:

x64>А вообще, если сверхвысокая точность не нужна, и чтобы без наворотов, тогда посмотри вот эти две:


x64>FindFirstChangeNotification()

x64>ReadDirectoryChangesW()

Уведомлялки работают на уже пройденные события.
Мне желательно не дать записать файл если он не соответсвует Маске

Спасибо за участие! Очень полезный спор!

Можно конечно перебором по всем Окнам и хыкать. Вот если файл пишется по сети?

Из того что я "нарыл" в инете, предлагают пользовать ЭТО.

Кто нибудь с таким монстром пробовал хукать?

http://www.codeproject.com/KB/DLL/funapihook.aspx
Re[3]: Уведомлялки
От: rus blood Россия  
Дата: 10.06.09 17:11
Оценка:
Здравствуйте, gorr.ka, Вы писали:

GK>Можно конечно перебором по всем Окнам и хыкать. Вот если файл пишется по сети?


А при чем тут Окна?
CEMЬ говорил не про хуки на окна...


GK>Кто нибудь с таким монстром пробовал хукать?


Не надо тебе это делать. Нотификации, которые ты хочешь, в WinAPI не предусмотрены, а API-хуки или, тем более, драйвера, ты сейчас не потянешь.

Может, ты просто опишешь, зачем тебе это нужно?
Может тогда тебе предложат более простое решение...
Имею скафандр — готов путешествовать!
Re[4]: Уведомлялки
От: gorr.ka  
Дата: 10.06.09 19:01
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, gorr.ka, Вы писали:


GK>>Можно конечно перебором по всем Окнам и хыкать. Вот если файл пишется по сети?


RB>А при чем тут Окна?

RB>CEMЬ говорил не про хуки на окна...


GK>>Кто нибудь с таким монстром пробовал хукать?


RB>Не надо тебе это делать. Нотификации, которые ты хочешь, в WinAPI не предусмотрены, а API-хуки или, тем более, драйвера, ты сейчас не потянешь.


RB>Может, ты просто опишешь, зачем тебе это нужно?

RB>Может тогда тебе предложат более простое решение...

Задание:

На заданную папку поставить фильтр по маске на имена файлов:
— на запись
— переименование

Отлавливаться события должны ДО совершения оного события,
тоесть при пробе записать файл, проверить на соответствие по маске, и по результату разрешить или отвергнуть. То же и с переименованием.
Те же правила на Папки.
Re[5]: Уведомлялки
От: x64 Россия  
Дата: 10.06.09 20:20
Оценка:
GK>Задание:
GK>На заданную папку поставить фильтр по маске на имена файлов:
GK>- на запись
GK>- переименование
GK>Отлавливаться события должны ДО совершения оного события,
GK>тоесть при пробе записать файл, проверить на соответствие по маске, и по результату разрешить или отвергнуть. То же и с переименованием.
GK>Те же правила на Папки.

Ещё раз: драйвер файловый фильтр. Сколько раз написать надо, чтобы дошло?
Re[5]: Уведомлялки
От: rus blood Россия  
Дата: 10.06.09 20:52
Оценка:
Здравствуйте, gorr.ka, Вы писали:

GK>Задание:


GK>На заданную папку поставить фильтр по маске на имена файлов:

GK>- на запись
GK>- переименование

GK>Отлавливаться события должны ДО совершения оного события,

GK>тоесть при пробе записать файл, проверить на соответствие по маске, и по результату разрешить или отвергнуть. То же и с переименованием.
GK>Те же правила на Папки.

А откуда такие требования?
Ты воюешь с пользователями или другими программами?
Что будет, если будет создан файл, имя которого не соответствует маске?
Это нужно для твоей программы или для какой-то другой?
Имею скафандр — готов путешествовать!
Re[5]: Уведомлялки
От: IID Россия  
Дата: 10.06.09 21:55
Оценка:
Здравствуйте, gorr.ka, Вы писали:

GK>Задание:


GK>На заданную папку поставить фильтр по маске на имена файлов:

GK>- на запись
GK>- переименование

GK>Отлавливаться события должны ДО совершения оного события,

GK>тоесть при пробе записать файл, проверить на соответствие по маске, и по результату разрешить или отвергнуть. То же и с переименованием.
GK>Те же правила на Папки.

Наш продукт это умеет. И он бесплатный.
kalsarikännit
Re[6]: Уведомлялки
От: x64 Россия  
Дата: 10.06.09 22:06
Оценка:
IID>Наш продукт это умеет.

Ему задание дали, он бабла срубить хочет, а ты ему про продукт какой-то
Re[7]: Уведомлялки
От: IID Россия  
Дата: 10.06.09 22:25
Оценка:
Здравствуйте, x64, Вы писали:

IID>>Наш продукт это умеет.


x64>Ему задание дали, он бабла срубить хочет, а ты ему про продукт какой-то


Мз его постов это вроде ниоткуда не следует. Может задание — комп настроить ? Впрочем, послушаем топик-стартера.
kalsarikännit
Re[8]: Уведомлялки
От: x64 Россия  
Дата: 10.06.09 22:40
Оценка:
IID>Может задание — комп настроить?

Ну кагбэ если б он хотел именно настроить, он бы и спрашивал про готовые решения, а не про API.
Re[6]: Как с помощью Win Api поймать ивент на событие CopyFi
От: CEMb  
Дата: 11.06.09 07:59
Оценка:
Здравствуйте, x64, Вы писали:

x64>Я же предупреждал — не надо спорить...


Ок, я почитаю те три линка про драйвера

CEM>>2. Хуки — в msdn описаны подробно.


x64>Да-а-а?? Ну найдёшь — я тебе оценку поставлю.


SetWindowsHookEx

CEM>>0. Согласен, хуки — это крайний метод. Но драйвер под эту задачу писать... это слишком.


x64>По твоей логике получается, что автору можно сразу убиться об стенку, ибо кроме хуков и фильтров других решений просто нет.


Не, я имел ввиду, что хуки — это крайний метод вообще, а не в данной задаче.

CEM>>У человека вопрос был — перехватить пару конкретных вызовов, а не написать мега-монитор файлов

CEM>>Я предложил и дал ссылку на самое простое решение в 15 строчек, реализуемое в одном проекте.

x64>Ещё раз: простых решений здесь не бывает, надёжность предложенного тобой решения равна чуть более чем нулю.

Ок, ладно, соглашусь. Системные процессы не дадут в себя код встроить просто так.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.