>Хочу отловить момент появления процесса и остановить его выполнение.
либо перехватываем функции типа CreateProcess (из usermode), либо в режиме ядра посредством вызова PsSetCreateProcessNotifyRoutine устанавливаем callback-routine, которая будет вызываться при создании/удалении процесса
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Вумудщзук, Вы писали:
>>Хочу отловить момент появления процесса и остановить его выполнение.
В>либо перехватываем функции типа CreateProcess (из usermode), либо в режиме ядра посредством вызова PsSetCreateProcessNotifyRoutine устанавливаем callback-routine, которая будет вызываться при создании/удалении процесса
выделенное придётся перехватывать во всех процессах, которые _потенциально_ могут запустить новый процесс. Тогда прокатит. И во вновь запущенных опять перехватывать. Замечу, что может иметь смысл перехват ResumeThread — главный поток процесса всегда создаётся в состоянии suspended, после настройки импорта/etc. происходит его старт по ResumeThread. Перехватывая её, мы получаем уже полностью готовый к старту, но ещё не стартовавший поток.
IID>выделенное придётся перехватывать во всех процессах, которые _потенциально_ могут запустить новый процесс. Тогда прокатит. И во вновь запущенных опять перехватывать. Замечу, что может иметь смысл перехват ResumeThread — главный поток процесса всегда создаётся в состоянии suspended, после настройки импорта/etc. происходит его старт по ResumeThread. Перехватывая её, мы получаем уже полностью готовый к старту, но ещё не стартовавший поток.
при этом ещё неплохо бы учитывать, что
1. ранее запущенные проги могут получить поинтеры на ту же CreateProcess до установки хука, тогда им этот хук будет по боку...
2. если прога, которая ставит хук, будет запущена из-под экаунта юзера или гостя, то про надёжный перехват функций можно вообще забыть...
короче, тот классический трюк по Рихтеру с перехватом функций не кажется совершенством, но как вариант...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Вумудщзук, Вы писали:
IID>>выделенное придётся перехватывать во всех процессах, которые _потенциально_ могут запустить новый процесс. Тогда прокатит. И во вновь запущенных опять перехватывать. Замечу, что может иметь смысл перехват ResumeThread — главный поток процесса всегда создаётся в состоянии suspended, после настройки импорта/etc. происходит его старт по ResumeThread. Перехватывая её, мы получаем уже полностью готовый к старту, но ещё не стартовавший поток.
В>при этом ещё неплохо бы учитывать, что
В>1. ранее запущенные проги могут получить поинтеры на ту же CreateProcess до установки хука, тогда им этот хук будет по боку...
В>2. если прога, которая ставит хук, будет запущена из-под экаунта юзера или гостя, то про надёжный перехват функций можно вообще забыть...
В>короче, тот классический трюк по Рихтеру с перехватом функций не кажется совершенством, но как вариант...
по пункту 1: ну получат они и что ? мы же не о подмене импорта говорим, верно ? при подмене импорта даже банальная LoadLibrary/GetProcAddress позволит обойти хук.
по пункту 2: перехват будет надёжным, но перехватить можно будет только ранее запущеные и вновь запускаемые процессы из-под этого же аккаунта. И лучшего решения нет. Либо дырку искать/юзать (очень ненадёжно), либо вообще забить. Перехват в ядре требует администраторских прав. А что вы хотели ? NT имеет неплохую систему безопастности.