Это перевод Why can't you trap TerminateProcess? Автор: Реймонд Чен.
Если пользовать запускает менеджер задач и щёлкает по кнопке "Снять Задачу", то Windows сначала попробует закрыть вас мягко: отправляя сообщения WM_CLOSE для GUI-программы или событие CTRL_CLOSE_EVENT для консольных программ. Но у вас нет аналогичного способа отреагировать на TerminateProcess. Почему нет?
TerminateProcess - это низко-уровневая процедура убийства процесса. Она пропускает вызовы DLL_PROCESS_DETACH и вообще любой ваш код в процессе. Как только вы вызвали функцию TerminateProcess - в процессе больше не исполняется никакой код режима пользователя. Всё, процесс ушёл, его больше нет.
Если бы вы могли бы перехватить TerminateProcess, тогда вы просто бы подлили масла в огонь борьбы пользователей и программ. Предположим, что вы смогли перехватить эту функцию. Тогда, чтобы сделать свою программу неубиваемой, вы могли бы просто зависнуть в своём обработчике TerminateProcess!
А тогда люди начнут спрашивать "способ убить процесс, который не хочет убиваться по TerminateProcess" - и мы снова возвращаемся к тому же, откуда начали.
Завтра: рассказ о процессах, которые остаются висеть в диспетчере задач, хотя вы убили их. Они действительно мертвы, но просто не уходят.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.