Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пресекание убийства процесса, Как запретить убийство процесса 
:(
    Опции темы
EuGenius_Krivbass
  Дата 15.1.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



У меня есть прога, убийство которой я хочу предотвратить, т.е. чтобы прогу никто не мог закрыть кроме нее самой.
Диспетчер задач тоже не должен уметь завершать процесс проги.
Благодарю за помощь.
PM MAIL ICQ Skype YIM   Вверх
merge
Дата 15.1.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.3.2007

Репутация: нет
Всего: 1



только написанием драйвера. иначе - никак.
PM MAIL   Вверх
EuGenius_Krivbass
Дата 15.1.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



Знать бы как это написать....
PM MAIL ICQ Skype YIM   Вверх
farad
Дата 15.1.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: нет
Всего: 6



Цитата(EuGenius_Krivbass @  15.1.2008,  15:47 Найти цитируемый пост)
Диспетчер задач тоже не должен уметь завершать процесс проги.
 такого не бывает. кому надо тот процесс грохнет полюбому и драйверы тут не причем...Другое дело можно административными средствами всячески ограничить права пользователя...
PM MAIL   Вверх
Ch0bits
Дата 15.1.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Можно запускать два экземпляра программы, чтобы они отслеживали состояние друг друга и при необходимости перезапускались.
В висте можно использовать Application Recovery and Restart API.
PM WWW   Вверх
merge
Дата 15.1.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.3.2007

Репутация: нет
Всего: 1



Цитата(Ch0bits @ 15.1.2008,  16:52)
Можно запускать два экземпляра программы, чтобы они отслеживали состояние друг друга и при необходимости перезапускались.

это глупость. процессы замораживаются и киляются.

Реализацию на приемлемом уровне можно сделать с помощью драйвера. с вопросами в гугл.

Это сообщение отредактировал(а) merge - 15.1.2008, 17:59
PM MAIL   Вверх
Legolas
Дата 15.1.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 14.2.2007

Репутация: нет
Всего: 5



можно попробовать приклеить свой процесс к системному. 
PM MAIL   Вверх
farad
Дата 15.1.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: нет
Всего: 6



Цитата(merge @  15.1.2008,  17:29 Найти цитируемый пост)
с вопросами в гугл.
лучший ответ smile позвольте узнать, а что вы подразумеваете под словом драйвер?

PM MAIL   Вверх
Ch0bits
Дата 15.1.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Цитата(merge @  15.1.2008,  17:29 Найти цитируемый пост)
это глупость. процессы замораживаются и киляются.

Это глупости. Все зависит от реализации. У хорошего программиста не будет ни deadlock, ни livelock.

К слову. Убийства через диспетчер задач можно избежать, если назвать исполняемый файл именем критического процесса, например: lsass.exe, services.exe, csrss.exe и т.п.

Это сообщение отредактировал(а) Ch0bits - 15.1.2008, 18:19
PM WWW   Вверх
merge
Дата 16.1.2008, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.3.2007

Репутация: нет
Всего: 1



Цитата(Ch0bits @ 15.1.2008,  18:10)
Все зависит от реализации. У хорошего программиста не будет ни deadlock, ни livelock.

К слову. Убийства через диспетчер задач можно избежать, если назвать исполняемый файл именем критического процесса, например: lsass.exe, services.exe, csrss.exe и т.п.

можете привести пример программы такой? Которая создает два экземпляра контролируют друг друга. При этом не киляются.

Про системное имя файла это тоже так себе "защита". Стороннему процессу пофиг какое имя файла.

Я выкладываю пример программы, которая защищается драйвером от открытия с флагом PROCESS_TERMINATE. Но и это не панацея. Можно такой процесс убить перемочив все потоки в нем. Посему нужно следить и за этим.
  • Открываем KmdManager.exe, инсталлируем драйвер, загружаем драйвер
  • Запускаем прогу NoTerminate.exe
  • Пытаемся закилить
  • Выгружаем драйвер и удаляем.

Тут все зависит - какую сложность нужно автору. может ему хватит двух процессов.

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  no_terminate.rar 19,73 Kb
PM MAIL   Вверх
EnergoHokum
Дата 16.1.2008, 11:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Насколько я помню (поправьте, если что), при попытке закрытия программы операционка сначала пытается сделать это "вежливо", посылкой сообщений, если приложение на них не реагирует -- тогда разговор становится "жёстче". Как вариант, при первой-же "вежливой просьбе" процесс создаёт свою копию, скидывает туда данные, которые нужно сохранить для работы, и "умирает". Как такой вариант?
PM MAIL ICQ   Вверх
BorisVorontsov
Дата 16.1.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 4
Всего: 10



Цитата(EnergoHokum @  16.1.2008,  11:15 Найти цитируемый пост)
Насколько я помню (поправьте, если что), при попытке закрытия программы операционка сначала пытается сделать это "вежливо", посылкой сообщений, если приложение на них не реагирует -- тогда разговор становится "жёстче".


По умолчанию - да. Но можно легко настроить так, что бы разговор был "жёстким" сразу.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
W4FhLF
Дата 16.1.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Создаёшь процесс, запускаешь, из него подгружаешь в адресное пространство svchost.exe свою dll, которая при убийстве процесса перегружает его. Если убить целиком svchost.exe - система умрёт. Придётся выгружать dll либо по-хорошему(посылкой DLL_PROCESS_DETACH, мы ессно это сообщение поймаем и не согласимся выгружатьсяsmile ), либо по плохому: вычисление потока в котором крутится код DLL и убиение онного насильно. Ещё после этого можно удалить DLL, но в таком случае пользовательский процесс может установить Notify Rotine на этот файл(NtNotifyChangeDirectoryFile), т.е. когда пользователь попытается удалить его - твофя программа об этом узнает и запишет его на винт снова(из ресурсов, например). Но идея с DLL в прицнипе не очень, лучше взять базонезависимый код, либо скомпилированный для нестаднартной базы(0x13150000 например) и внедрить его в системный процесс, а код будет проверять на наличие процесса в списке активных, если его не будет, то код запускает его опять. 

Это лишь малая часть методов для режима пользователя(т.е. без драйвера). Суть в том, что на каждое действие находится своё противодействие. Тут всё зависит от ищущегоsmile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.