Hook на CreateProcess

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Еще одну интересную темку создам..
Нужно в течении некотого промежутка закрывать все созданные процессы.
В принцыпе есть варриант сравнить все хандлы, но хочется именно перехватом сделать..
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Не очень понятна идея.
Если нужно закрыть процесс(ы), хэндлы которых известны, то зачем вообще hook?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Да нет, надо либо убивать вновь созданные, либо их вообще не создавать. Первый вариант не желателен, надо второй через хук. Вроде понятно все.
It's a long way to the top if you wanna rock'n'roll
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

somewhere писал(а):Да нет, надо либо убивать вновь созданные, либо их вообще не создавать. Первый вариант не желателен, надо второй через хук. Вроде понятно все.
Пробежался по описанию SetWindowsHookEx, что-то не нашел возможности вешаться на запуск процесса. Или речь о каком-то другом хуке?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Да все делпется через SetWindowsHookEx но с ней я не работал никогда, примеров на перехват клавы полно, но вот на процесс нигде нет..
Убивать вновь созданные может привести к ошибке приложения которое вызывает оное.. А вот закрыть его как раз то что надо..
Поиск окон ведется обычно через заголовок (текст) окна, а он в короткий промежуток может не успеть поменяться итд итп, сравнивать все Хандлы тож не гуд варриант (но в принцыпе рабочий, только сами понимаете отожрет процессорного времени в системе Хандлов около 200 присутствует в постоянном режиме, этож надо каждый раз сравнить)
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Duncon писал(а):Да все делпется через SetWindowsHookEx но с ней я не работал никогда, примеров на перехват клавы полно, но вот на процесс нигде нет..
Я делал хук на запрет создания окон (идея: некое приложение в определенный момент выводит диалог с единственной кнопкой OK, а хотелось бы, чтобы это окно не выскакивало).
Просмотрел сейчас по MSDN (у меня, правда, старенький стоит - October 2001) описание SetWindowsHookEx - про перехват запуска процессов там ничего не нашел.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Таки и не найдешь там ряд параметров кторорые изменяются в зависимости от предидущего, я так предполагаю это делается через WH_SHELL , и в функции обратного вызова все это расчленять, но инфы как токовой не найти, залудили весь инет...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Up .
Аватара пользователя
Vedrus
Сообщения: 39
Зарегистрирован: 27 сен 2007, 13:04

Через хуки процессы перехватывать нельзя. Самое простое, что можно сделать - использовать функцию CreateToolhelp32Snapshot и иже с ней (см. MSDN). Если же всё-таки надо именно перехватывать, то копай в сторону драйверов и руткитов.

ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Vedrus писал(а):ЗЫ. По поводу запрета создания окон. В системе в конкретный момент времени может быть зарегистрировано конечное число классов окна. Если зарегистрировать их в цикле в числе 100 000, то окна больше не будут создаваться, т.к. чтобы создаться нужно класс зарегистрировать. После этого только палец в Reset поможет.
1. Запрет создания "нужных" окон, как я уже писал, как раз легко делается через хук.
2. А если (после этих 100 000 регистраций) пытаться создать окно уже зарегистрированного класса? :)
Ответить