Войти

Показать полную графическую версию : Убийца приложения


WakeUp
21-01-2003, 22:07
Как сделать,чтобы моё приложение нельзя было убить? Или какие messages
ловить?
(в Ctrl + Alt + Del его не видно, тут проблем нет)

Lunich
23-01-2003, 00:08
Можно попробовать перезапускать процесс при попытке закрыть приложение... Но это в зависимости от того, что именно хочеться увидеть в итоге...

vasketsov
23-01-2003, 02:37
WakeUp
Никак.
Если захотят - все равно убьют.

На некоторых NT-системах нельзя прибить CSRSS.EXE, но это так задумано на уровне ядра.

При вызове TerminateProcess ловить сообщения бесполезно, их просто не будет.

mar
23-01-2003, 02:42
Или какие messages ловить
WM_DESTROY
WM_CLOSE

vasketsov
23-01-2003, 09:41
mar
Эти сообщения посылаются окну, и то не гарантировано.

mar
23-01-2003, 10:51
vasketsov
конечно, посылаются окну (и вопрос был - какие сообщения ловить) :) насчет - необязательно - это то есть как? :o
именно что обязательно - так окошки устроены - на распределении и обработке сообщений.
см. MSDN (http://search.microsoft.com/default.asp?qu=WM%5FDESTROY&boolean=ALL&nq=NEW&so=RECCNT&p=1&ig=01&ig=03&ig=04&ig=05&ig=06&i=00&i=01 &i=02&i=03&i=04&i=05&i=06&i=07&i=08&i=09&i=10&i=11&i=12&i=13&i=14&i=15&i=16&i=17&i=18&i=19&i=20&i=21 &i=22&i=23&i=24&i=25&i=26&i=27&i=28&i=29&i=30&i=31&i=32&i=33&i=34&i=35&i=36&i=37&i=38&i=39&i=40&i=41 &siteid=us/dev)
Когда мы хотитм закрыть окно - любым способом, то ему посылается сообщение WM_DESTROY Оно попадает в функцию окна и уже она, вызывает функцию PostQuitMessage(), которая помещает в очередь сообщений WM_QUIT
Когда из очереди выбирается WM_QUIT, GetMessage (или ее заменитель :) ) возвращает FALSE и приложение должно завершить цикл обработки.
т.е., если не хотеть закрываться, то в WndProc, или в том, что ее заменяет, надо обратить внимание на стандартное место

  case WM_DESTROY:
    PostQuitMessage(0);  // и вместо этого что-нибудь сделать
    break;

WakeUp
23-01-2003, 18:13
mar
Это всё при нормальном завершении приложения.
Я пробовал.:(

P.S. забыл: всё это под Win9X.

vasketsov
23-01-2003, 20:26
mar
В начале ссылки на WinCE, там-то как раз это не обязательно и в MSDN это даже написано.

обработке сообщений.
Да, но вовсе не обязательно WM_DESTROY окно получает.
Гляди псевдокод.

BOOL bClosed = FALSE; //глоб. перем.

//оконная функция
WndProc()
{
if (uMsg == WM_CLOSE)
bClosed = TRUE;
}

while (GetMessage())
{
тут цикл.

if (bClosed) break;
}

И окно WM_DESTROY не получит.

Кроме того, существуют особености неполучения этого сообщения при выходе из системы.

mar
23-01-2003, 23:08
vasketsov так я про wm_close писала,  а в код, извини, не воткнула. Это же Microsoft ! у них, как в египетской мифологии: куча богов отвечает за одно и то же, а для жрецов  еще и  недокументированные возможности :)
WakeUp
а что ты понимаешь под ненормальным завершением? мы же не будем настаивать на том, чтобы приложение продолжало работать с выключенным питанием :)

WakeUp
23-01-2003, 23:52
mar

Ну например берёшь ZXView (я обычно им пользуюсь),
он показывает все процессы (а не окна) и убиваешь любой процесс. Ведь в приложеннии может не быть окон.

mar
24-01-2003, 00:51
WakeUp
мы тут не вирус случайно пишем объединенными усилиями?
системный процесс? посмотри, как его убивают (http://www.bio.pu.ru/~mar/docs/1014772507.txt) + MSDN на то, что там, может, скомпонуешь, как не убивать. Если придумаешь, напиши, pls. Это может быть полезно и для благих целей :)

Добавлено:

да, самое главное - склероз :( TerminateProcess и вообще посмотри Рихтера (Windows для профессионалов) (http://port.mnet.uz/pub/books/Computers/richter/)  Про процессы.


Исправлено: mar, 1:28 24-01-2003

J Fox
24-01-2003, 10:20
WakeUp
посмотри здесь http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1039850962&n=5!!!!!

mar
24-01-2003, 15:05
о перехвате API - функций, кстати, тоже написано у Рихтера
Поскольку у меня сейчас тоже проблема с перехватом API,
я тут ковырялась в сети и нашла пример перехвата API для защиты от  удаленного перезапуска компьютера:
http://www.hackzone.ru/articles/ntadmin.html
Кроме того, перехват API обсуждался и на этом форуме (http://forum.oszone.net/topic.cgi?forum=18&topic=103)

WakeUp
24-01-2003, 18:26
Спасибо всем за информацию.
Наверно остановлюсь на варианте с 2-3 процессами.
Он проще всех других:)




© OSzone.net 2001-2012