Hook на CreateProcess
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Еще одну интересную темку создам..
Нужно в течении некотого промежутка закрывать все созданные процессы.
В принцыпе есть варриант сравнить все хандлы, но хочется именно перехватом сделать..
Нужно в течении некотого промежутка закрывать все созданные процессы.
В принцыпе есть варриант сравнить все хандлы, но хочется именно перехватом сделать..
Не очень понятна идея.
Если нужно закрыть процесс(ы), хэндлы которых известны, то зачем вообще hook?
Если нужно закрыть процесс(ы), хэндлы которых известны, то зачем вообще hook?
Да нет, надо либо убивать вновь созданные, либо их вообще не создавать. Первый вариант не желателен, надо второй через хук. Вроде понятно все.
It's a long way to the top if you wanna rock'n'roll
Пробежался по описанию SetWindowsHookEx, что-то не нашел возможности вешаться на запуск процесса. Или речь о каком-то другом хуке?somewhere писал(а):Да нет, надо либо убивать вновь созданные, либо их вообще не создавать. Первый вариант не желателен, надо второй через хук. Вроде понятно все.
Да все делпется через SetWindowsHookEx но с ней я не работал никогда, примеров на перехват клавы полно, но вот на процесс нигде нет..
Убивать вновь созданные может привести к ошибке приложения которое вызывает оное.. А вот закрыть его как раз то что надо..
Поиск окон ведется обычно через заголовок (текст) окна, а он в короткий промежуток может не успеть поменяться итд итп, сравнивать все Хандлы тож не гуд варриант (но в принцыпе рабочий, только сами понимаете отожрет процессорного времени в системе Хандлов около 200 присутствует в постоянном режиме, этож надо каждый раз сравнить)
Убивать вновь созданные может привести к ошибке приложения которое вызывает оное.. А вот закрыть его как раз то что надо..
Поиск окон ведется обычно через заголовок (текст) окна, а он в короткий промежуток может не успеть поменяться итд итп, сравнивать все Хандлы тож не гуд варриант (но в принцыпе рабочий, только сами понимаете отожрет процессорного времени в системе Хандлов около 200 присутствует в постоянном режиме, этож надо каждый раз сравнить)
Я делал хук на запрет создания окон (идея: некое приложение в определенный момент выводит диалог с единственной кнопкой OK, а хотелось бы, чтобы это окно не выскакивало).Duncon писал(а):Да все делпется через SetWindowsHookEx но с ней я не работал никогда, примеров на перехват клавы полно, но вот на процесс нигде нет..
Просмотрел сейчас по MSDN (у меня, правда, старенький стоит - October 2001) описание SetWindowsHookEx - про перехват запуска процессов там ничего не нашел.
Таки и не найдешь там ряд параметров кторорые изменяются в зависимости от предидущего, я так предполагаю это делается через WH_SHELL , и в функции обратного вызова все это расчленять, но инфы как токовой не найти, залудили весь инет...
Up .
Через хуки процессы перехватывать нельзя. Самое простое, что можно сделать - использовать функцию CreateToolhelp32Snapshot и иже с ней (см. MSDN). Если же всё-таки надо именно перехватывать, то копай в сторону драйверов и руткитов.
ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.
ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.
1. Запрет создания "нужных" окон, как я уже писал, как раз легко делается через хук.Vedrus писал(а):ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.
2. А если (после этих 100 000 регистраций) пытаться создать окно уже зарегистрированного класса?
