Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Пресекание убийства процесса |
Автор: EuGenius_Krivbass 15.1.2008, 15:47 |
У меня есть прога, убийство которой я хочу предотвратить, т.е. чтобы прогу никто не мог закрыть кроме нее самой. Диспетчер задач тоже не должен уметь завершать процесс проги. Благодарю за помощь. |
Автор: merge 15.1.2008, 15:59 |
только написанием драйвера. иначе - никак. |
Автор: EuGenius_Krivbass 15.1.2008, 16:02 |
Знать бы как это написать.... |
Автор: farad 15.1.2008, 16:30 |
такого не бывает. кому надо тот процесс грохнет полюбому и драйверы тут не причем...Другое дело можно административными средствами всячески ограничить права пользователя... |
Автор: Ch0bits 15.1.2008, 16:52 |
Можно запускать два экземпляра программы, чтобы они отслеживали состояние друг друга и при необходимости перезапускались. В висте можно использовать Application Recovery and Restart API. |
Автор: merge 15.1.2008, 17:29 | ||
это глупость. процессы замораживаются и киляются. Реализацию на приемлемом уровне можно сделать с помощью драйвера. с вопросами в гугл. |
Автор: Legolas 15.1.2008, 17:48 |
можно попробовать приклеить свой процесс к системному. |
Автор: farad 15.1.2008, 18:09 |
лучший ответ ![]() |
Автор: Ch0bits 15.1.2008, 18:10 |
Это глупости. Все зависит от реализации. У хорошего программиста не будет ни deadlock, ни livelock. К слову. Убийства через диспетчер задач можно избежать, если назвать исполняемый файл именем критического процесса, например: lsass.exe, services.exe, csrss.exe и т.п. |
Автор: merge 16.1.2008, 09:08 | ||
можете привести пример программы такой? Которая создает два экземпляра контролируют друг друга. При этом не киляются. Про системное имя файла это тоже так себе "защита". Стороннему процессу пофиг какое имя файла. Я выкладываю пример программы, которая защищается драйвером от открытия с флагом PROCESS_TERMINATE. Но и это не панацея. Можно такой процесс убить перемочив все потоки в нем. Посему нужно следить и за этим.
Тут все зависит - какую сложность нужно автору. может ему хватит двух процессов. |
Автор: EnergoHokum 16.1.2008, 11:15 |
Насколько я помню (поправьте, если что), при попытке закрытия программы операционка сначала пытается сделать это "вежливо", посылкой сообщений, если приложение на них не реагирует -- тогда разговор становится "жёстче". Как вариант, при первой-же "вежливой просьбе" процесс создаёт свою копию, скидывает туда данные, которые нужно сохранить для работы, и "умирает". Как такой вариант? |
Автор: W4FhLF 16.1.2008, 13:16 |
Создаёшь процесс, запускаешь, из него подгружаешь в адресное пространство svchost.exe свою dll, которая при убийстве процесса перегружает его. Если убить целиком svchost.exe - система умрёт. Придётся выгружать dll либо по-хорошему(посылкой DLL_PROCESS_DETACH, мы ессно это сообщение поймаем и не согласимся выгружаться![]() Это лишь малая часть методов для режима пользователя(т.е. без драйвера). Суть в том, что на каждое действие находится своё противодействие. Тут всё зависит от ищущего ![]() |