Hook на CreateProcess

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

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

27 дек 2007, 12:44

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

27 дек 2007, 13:25

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

27 дек 2007, 13:31

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

27 дек 2007, 14:46

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

27 дек 2007, 14:55

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

27 дек 2007, 16:01

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

27 дек 2007, 17:15

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

29 дек 2007, 21:12

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

30 дек 2007, 09:00

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

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

30 дек 2007, 14:21

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