Ну я так и думал... Теперь следи за руками: эта API позволяет внедрить DLL в процесс. Точка. А вот то, что реально эта DLL там будет делать (подмена функций), — нигде не документировано и нигде в MSDN не сказано, что это вообще можно делать (по факту, это можно делать сейчас только посредством механизма hot-patching, а оно не для всех).
x64>>Ещё раз: простых решений здесь не бывает, надёжность предложенного тобой решения равна чуть более чем нулю. CEM>Ок, ладно, соглашусь. Системные процессы не дадут в себя код встроить просто так.
Это да, но даже не в этом дело. Хуки пользовательского режима легко обходятся, очень легко, легче лёгкого. Плюс куча гемора, описанного IID'ом, — это всё не стоит того.
Здравствуйте, rus blood, Вы писали:
RB>Здравствуйте, gorr.ka, Вы писали:
GK>>Задание:
GK>>На заданную папку поставить фильтр по маске на имена файлов: GK>>- на запись GK>>- переименование
GK>>Отлавливаться события должны ДО совершения оного события, GK>>тоесть при пробе записать файл, проверить на соответствие по маске, и по результату разрешить или отвергнуть. То же и с переименованием. GK>>Те же правила на Папки.
RB>А откуда такие требования? RB>Ты воюешь с пользователями или другими программами? RB>Что будет, если будет создан файл, имя которого не соответствует маске? RB>Это нужно для твоей программы или для какой-то другой?
Это нужно для другой программы.
Прога трете-сторонняя, но компания не хочет ее сменять.
Здравствуйте, x64, Вы писали:
IID>>Наш продукт это умеет.
x64>Ему задание дали, он бабла срубить хочет, а ты ему про продукт какой-то
Если продукт хороший , придется делать Враппер на продукт.
Шутка...
Здравствуйте, x64, Вы писали:
IID>>Может задание — комп настроить?
x64>Ну кагбэ если б он хотел именно настроить, он бы и спрашивал про готовые решения, а не про API.
Верно говорит товарищ.
Я предложил заказчику пост-нитификацию, с последующими действиями.
Сказали что такое у них имеется и их толзу от такого глючит.
Как я понимаю, это уровень оболочки? Значит, если тупо вызвать CopyFile(), то колбек не сработает. Тут я не уверен, но думаю, что всё именно так. К тому же, здесь имеем все те же проблемы, что и с обычными хуками режима пользователя. Я бы не искал на твоём месте лёгких путей, лучше займись изучением файловых фильтров. Если, конечно, оно того стоит...
Re[8]: Как с помощью Win Api поймать ивент на событие CopyFi
Здравствуйте, x64, Вы писали:
CEM>>SetWindowsHookEx
x64>Ну я так и думал... Теперь следи за руками: эта API позволяет внедрить DLL в процесс. Точка. А вот то, что реально эта DLL там будет делать (подмена функций), — нигде не документировано и нигде в MSDN не сказано, что это вообще можно делать (по факту, это можно делать сейчас только посредством механизма hot-patching, а оно не для всех).
Эээ... давай с понятиями разберёмся. Хуки — это хуки — фунцкии-перехватчики событий windows. Они живут в цепочке хуков, но никого не подменяют.
А подмена функций — это подмена функций. Она может, и на 90% должна делаться без хуков. Иди ставь оценку Подмена функций (та, что у Рихтера) в msdn-е не описана. Хуки — описаны. Где моя оценка?
Re[9]: Как с помощью Win Api поймать ивент на событие CopyFi
CEM>>>SetWindowsHookEx CEM>Эээ... давай с понятиями разберёмся. Хуки — это хуки — фунцкии-перехватчики событий windows.
Хуки = подмена функций. Слово "Hook" в названии вышеуказанной API не имеет сюда никакого отношения, это лишь совпадение терминов.
CEM>Подмена функций (та, что у Рихтера) в msdn-е не описана. Хуки — описаны. Где моя оценка?
С терминологией у тебя всё же слабовато. Оценки не будет.
Re: Как с помощью Win Api поймать ивент на событие CopyFile
GK>Как с помощью Win Api поймать ивент на событие CopyFile, Rename...?
GK>Вернее, я хочу отловить событие на создании файла, НЕ проверка на уже созданном? GK>Проверить нужно только по имени. Также подлежат отлову Rename, Delate.
Посмотри http://dokan-dev.net/en/download/ с помощью этой штуки можно создать зеркало любого диска и контролировать все операцции с ним. В том числе и создание файлов и пр... Решение хоть и не очень прямое и проге твоей придётся работать через этот фиктивный диск но всё же проще того что предложили в теме и вполне стабильно работающее.
Чем больше нас, тем меньше их...
Re[2]: Как с помощью Win Api поймать ивент на событие CopyFi
MV>Посмотри http://dokan-dev.net/en/download/ с помощью этой штуки можно создать зеркало любого диска и контролировать все операцции с ним. В том числе и создание файлов и пр... Решение хоть и не очень прямое и проге твоей придётся работать через этот фиктивный диск но всё же проще того что предложили в теме и вполне стабильно работающее.
Совет дилетанта. Этот Dokan — достаточно громоздкое и тормозное решение, реализующее фактически полноценный FSD. В данном случае лучше всего будет именно файловый фильтр. Ребят, ну о чём спорим, файловые фильтры для этого и предназначены, зачем же тогда вы ищете какие-то другие решения? Я вас не понимаю.
Re[9]: Как с помощью Win Api поймать ивент на событие CopyFi
Здравствуйте, CEMb, Вы писали:
CEM>Здравствуйте, x64, Вы писали:
CEM>>>SetWindowsHookEx
x64>>Ну я так и думал... Теперь следи за руками: эта API позволяет внедрить DLL в процесс. Точка. А вот то, что реально эта DLL там будет делать (подмена функций), — нигде не документировано и нигде в MSDN не сказано, что это вообще можно делать (по факту, это можно делать сейчас только посредством механизма hot-patching, а оно не для всех).
CEM>Эээ... давай с понятиями разберёмся. Хуки — это хуки — фунцкии-перехватчики событий windows. Они живут в цепочке хуков, но никого не подменяют. CEM>А подмена функций — это подмена функций. Она может, и на 90% должна делаться без хуков. Иди ставь оценку Подмена функций (та, что у Рихтера) в msdn-е не описана. Хуки — описаны. Где моя оценка?
Я бы тоже поставил оценку, если бы кроме слова Hook, здесь было что-то касающееся этой темы. Хук есть, перехвата файловых операций нет, все просто. Или может покажите цитату(пример) как с помощью этого перехватить файловые операции. Просто какой-то хук поставить недостаточно
Re[3]: Как с помощью Win Api поймать ивент на событие CopyFi
Здравствуйте, x64, Вы писали:
MV>>Посмотри http://dokan-dev.net/en/download/ с помощью этой штуки можно создать зеркало любого диска и контролировать все операцции с ним. В том числе и создание файлов и пр... Решение хоть и не очень прямое и проге твоей придётся работать через этот фиктивный диск но всё же проще того что предложили в теме и вполне стабильно работающее.
x64>Совет дилетанта. Этот Dokan — достаточно громоздкое и тормозное решение, реализующее фактически полноценный FSD. В данном случае лучше всего будет именно файловый фильтр. Ребят, ну о чём спорим, файловые фильтры для этого и предназначены, зачем же тогда вы ищете какие-то другие решения? Я вас не понимаю.
Тоже не люблю из пушки по воробьям, но как ни крути, в данном случае x64 прав, если постнотификация не устраивает, то дорога к файловому фильтру, тем более с появлением модели минифильтров, задача стала не такой уж громоздкой. От себя тоже советую, если задача важна в таком виде, не ищите других решений, найдете такие же или сложнее, а в итоге менее надежные.
Re[3]: Как с помощью Win Api поймать ивент на событие CopyFi
x64>Совет дилетанта. Этот Dokan — достаточно громоздкое и тормозное решение, реализующее фактически полноценный FSD. В данном случае лучше всего будет именно файловый фильтр. Ребят, ну о чём спорим, файловые фильтры для этого и предназначены, зачем же тогда вы ищете какие-то другие решения? Я вас не понимаю.
Хорошо.
Вопрос номер раз: Сколько времени с нуля займёт написание фильтра и сколько правка готового примера из DOKAN чтобы получить нужную функциональность?
Вопрос номер два: Какой опыт нужен в том и другом случае?
В результате ответа на эти вопросы может оказаться что исходя из задачи будет проще исспользовать громоздкий DOKAN а не предусмотренный для этого файловый фильтр.
Вот когда для построениея фильтра появиться что то подобное на DOKAN и бесплатное тогда без сомнения правильным выбором будет реализация фильтра.
Чем больше нас, тем меньше их...
Re[4]: Как с помощью Win Api поймать ивент на событие CopyFi
А я так и знал, что напишешь что-то подобное. ok, рассказываю, следи за руками: берёшь готовый пример из WDK и дописываешь только логику в обработчик всего лишь одного запроса (IRP_MJ_CREATE), — а уж используя минифильтры так вообще никаких нюансов знать не требуется. Это к вопросу о сложности реализации. Но даже не это главное. Поймите наконец, что каждый должен заниматься своим делом — прикладные программисты должны клепать формочки (условно), а написание драйверов-фильтров оставьте тем, у кого это получается лучше, то бишь системщикам. Всё просто.
Re[5]: Как с помощью Win Api поймать ивент на событие CopyFi
x64>А я так и знал, что напишешь что-то подобное. ok, рассказываю, следи за руками: берёшь готовый пример из WDK и дописываешь только логику в обработчик всего лишь одного запроса (IRP_MJ_CREATE), — а уж используя минифильтры так вообще никаких нюансов знать не требуется. Это к вопросу о сложности реализации.
Если разбираешься то да не сложно. Есть готовый пример для ламеров где подробно описано что и как делать?
x64>Но даже не это главное. Поймите наконец, что каждый должен заниматься своим делом — прикладные программисты должны клепать формочки (условно), а написание драйверов-фильтров оставьте тем, у кого это получается лучше, то бишь системщикам. Всё просто.
Неа не всё так просто. Есть задача, есть ресурсы на её решение(время/деньги). И исходя из этого выбирается путь для решения. И если под рукой нету специалиста. А оплатить ваши услуги нету денег то вполне подойдёт и некая примочка сделанная из того же dokan или из других подручных средств. Особенно если всё это сделано для внутреннего пользования.
А теорию как должно быть я и сам знаю. В идеале все прожки должны быть маленькими и шустрыми и на современном железе должны не просто летать а сверкать молнией. Ан нету этого и не будет. Ибо дорого это. Так и тут. Если есть дешовые пути решения проблемы и минусы этого решения устраивают пользователя то пойдут по этому пути а не по правильному.
Если есть желание чтобы народ ходил так как правильно значит нужно делать правильный путь короче и дешевле. Например написав цикл статей с примерами и пр... Или сделав что то подобное dokan для фильтра.
Чем больше нас, тем меньше их...
Re[6]: Как с помощью Win Api поймать ивент на событие CopyFi
MV>Есть готовый пример для ламеров где подробно описано что и как делать? MV>Или сделав что то подобное dokan для фильтра.
Так ведь самое интересное, что оно уже есть и, более того, оно бесплатно и уже встроено в систему начиная ажно с Windows XP SP2. Я говорю о минифильтрах. Это практически абстрагированный framework для реализации файловых фильтров. Для реализации поставленной задачи (в контексте топика) не потребуется сильно глубоких знаний ядра. А документация и даже готовые примеры есть в MSDN и WDK. Ничего сверхсложного, всего лишь внимательное чтение документации спасёт отца. Если минифильтры чем-то не устраивают (что маловероятно), то есть ещё как минимум два довольно известных (в узких кругах) фреймворка: от EldoS и от OSR. Они платные и довольно дорогие, но и качество соответствующее. В сети встречал ещё несколько аналогичных фрейворков с немного меньшей функциональностью, но ссылок уже не помню, в гугле можно найти, наверно.
Re[10]: Как с помощью Win Api поймать ивент на событие CopyF
Здравствуйте, Alexey Frolov, Вы писали:
CEM>>Эээ... давай с понятиями разберёмся. Хуки — это хуки — фунцкии-перехватчики событий windows. Они живут в цепочке хуков, но никого не подменяют. CEM>>А подмена функций — это подмена функций. Она может, и на 90% должна делаться без хуков. Иди ставь оценку Подмена функций (та, что у Рихтера) в msdn-е не описана. Хуки — описаны. Где моя оценка?
AF>Я бы тоже поставил оценку, если бы кроме слова Hook, здесь было что-то касающееся этой темы. Хук есть, перехвата файловых операций нет, все просто. Или может покажите цитату(пример) как с помощью этого перехватить файловые операции. Просто какой-то хук поставить недостаточно
Балииин, "безменя меняженили" Где хук?! Я не говорил слово "хук"!!! Я не знаю, как с помощью хуков перехватывать файловые операции
Re[5]: Как с помощью Win Api поймать ивент на событие CopyFi
Здравствуйте, IID, Вы писали:
CEM>>>С помощью Win Api это делается глобальным перехватом вызова функций CopyFile, Rename. Внедряемся в чужой процесс, перебираем все модули, прицепленные к нему, у них в таблице импорта меняем указатели CopyFile, Rename на свои.
нужно будет не забыть сделать это в _каждом_ процессе. Корректно задача перехвата во всех процессах решается опять же с помощью вспомогательного драйвера — к вопросу о целесообразности правильного решения о котором столько времени тут трактуют большевики
IID>>Хуки это ещё хуже (в порядке убывания важности): IID>>1) ошибка в фильтре не менее (а даже более) фатальна. Хинт: при ошибке в драйвере получишь BSOD, фильтр же может безнаказанно портить работу системы сколь угодно долго. IID>>2) такой фильтр не выгрузить. IID>>3) целостность UM процессов. Любая нормальная проактивная защита мигом пометит все хукнутые процессы как изменившиеся. Отрубит им сеть и напугает пользователя шквалом запросов (вполне обосновано, кстати). IID>>4) на x64 системах 32битный фильтр идёт лесом, придётся писать две штуки, и ставить их ОБЕ в систему. IID>>5) сложнее делать передачу данных между экземплярами фильтра. IID>- хуки придётся ставить на ntdll.dll, иначе часть вызовов пропустишь. IID>- создание файлов драйверами не перехватишь. IID>- вредный процесс может вызвать шлюз ядра вообще напрямую. И будет UM фильтр грустно по... покуривать в сторонке.
хороший список
Добавлю для коллекции:
— хуки это недокументированность и как следствие неподдерживаемость
— хуки это отнимающие массу ресурсов нетривиальные проблемы с синхронизацией и interoperability issues
— хуки это потенциальные дыры в подсистеме безопасности
— хуки это отсутствие гарантии, что весь набор API (существующего и будущего) окучен.
Практический пример: решение на хуках писалось во времена XP — в 2003 всплыли новые ф-ии вроде ReOpenFile, в новых ОС все время что-то еще появляется — типа COM интерфейсов IFileOperation под Вистой и т.п. C фильтрами тут бы ничего делать скорее всего не пришлось вовсе. С хуками можно с теми же COM интерфейсами зарыться капитально, тут уже не обойдешься перехватом в одну строку.
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Это не подходит для поставленной задачи. IFileOperation — это в первую очередь средство для выполнения различных операций, инициируемых тобой (позиционируется как замена SHFileOperation). Уведомления, соответственно, будут приходить только для обрабатываемых элементов.