Доброго всем времени суток! Задача состоит в перехвате запуска екзешников. Вариант с реестром(HCR\exefile\shell\open\command) по непонятным причинам не работает, хотя сама перехватывалка имеет расширение .com Какие будут варианты?
не вариант! перехватывать необходимо ДО инициализации, а в твоем случае это невозможно.. и есть риск падения, что не очень хорошо.
Устанавливаем нотфикатор PsSetCreateProcessNotifyRoutine, в калбеке вызываем PsLookupProcessByProcessId и передаем ид процессса, если имя процесса нам не нравится, то ZwOpenProcess->ZwTerminateProcess->ZwClose
хм, интересно.. ушел читать вариант с длл-кой может и пройти, но хотелось бы все-таки отбивать приложение еще до того как пойдет процесс инициализации..
Перехватывай CreateProcess с таким условием: если имя запускаемого файла равняется имени нужного тебе exe, то просто выходи из функции (заканчивай ее выполнение) иначе вызывай истинную CreateProcess со всеми входящими параметрами. Нужный тебе exe не запуститься никак.
если это поможет: запуск процесса в Windows NT: 1) Открытие исполняемого файла. 2) Создание секции (ZwCreateSection). 3) Создание обьекта процесса (ZwCreateProcess или ZwCreateProcessEx в Windows XP). 4) Создание окружения процесса (RtlCreateProcessParameters). 5) Создание главной нити процесса (ZwCreateThread). 6) Информирование сервера подсистемы о создании нового процесса (CsrClientCallServer). 7) Запуск главной нити нового процесса (ZwResumeThread).
спасибо, перехватываю ZwCreateThread не все процессы проходят через CreateProcess, а ZwCreateThread вызывается в любом случае, так что это более универсальный способ! Всем спасибо, вопрос исчерпан!