Как я могу помешать Диспетчеру задач закрывать мою программу?

Там какой-либо путь состоит в том, чтобы защитить мое приложение Delphi от того, чтобы быть уничтоженным диспетчером задач Windows (или другие как Проводник Процесса)?

Я думаю, что сообщения Windows могут сделать это (путем выполнения рычага и прерывания сообщения TerminateProcess).

Я хочу пример этой защиты. Комплекты Kaspersky Anti-Virus похожи на это; мы не можем закончить их процесс в Диспетчере задач.

10
задан Rob Kennedy 31 December 2009 в 02:17
поделиться

5 ответов

AV-программы, такие как Kaspersky, вероятно, используют драйвер и используют крючок для предотвращения прекращения. В вашей ситуации я бы посоветовал установить ACL в процессе, это предотвращает прекращение с помощью диспетчера задач или командной линии (если у пользователя нет привилегии отладки). Конечно, пользователь всегда может использовать инструмент, такой как Process Explorer, принимайте владение процессом, установить новый ACL и завершить.

Если пользователь не является администратором, достаточно запустить процесс в другом пользовательском контексте (например, запустить его из службы).

Установка процесса ACL очень прост при библиотеке безопасности Windows Windows , как этот выбор .

11
ответ дан 3 December 2019 в 14:43
поделиться

Это очень плохая идея. Если ваша программа запущена на чужом компьютере, то она находится в их собственности, а не в вашей, и должна вести себя как гость в их доме. Это значит, что вы не ведете себя так, как будто вам принадлежит это место, и вы определенно не говорите владельцу компьютера, что он не может сделать со своей собственностью, например, убить задачу, которую он не хочет выполнять. Если вы это сделаете, то ваша программа ничем не лучше вредоносного программного обеспечения, и, скорее всего, с ней будут обращаться как с вредоносным ПО

.
5
ответ дан 3 December 2019 в 14:43
поделиться

Создайте проект NT-сервиса, сервисные процессы не могут быть убиты менеджером процессов, но контролируются внутренним менеджером служб.

.
-1
ответ дан 3 December 2019 в 14:43
поделиться

Как говорит Корнель, существует защита на уровне ОС процессов, изолированных пользователями. Но, вообще говоря, нет никакого способа предотвратить завершение вашего процесса пользователем, имеющим на это разрешение. И у пользователя есть разрешение на завершение процессов, запущенных от имени этого пользователя.

Даже если вы хотите запустить его как SYSTEM, вы не сможете использовать этот процесс для взаимодействия с вошедшим в систему пользователем. Вам нужно будет запустить его как службу, и у него не будет графического интерфейса. Вы можете попробовать другие подходы, такие как загрузка DLL в такой процесс, как Explorer.exe, который пользователи не будут завершать, потому что они этого не хотят, но это просто оскорбление.

Было бы очень плохо для конечных пользователей, если бы разработчики могли просто писать приложения, которые нельзя было завершить. Если это внутреннее приложение, вы можете проверить сбой сервера, чтобы узнать, есть ли какой-то способ добиться этого с помощью групповой политики.

14
ответ дан 3 December 2019 в 14:43
поделиться

Думаю, вы задаете неправильный вопрос.

Вы пытаетесь решить проблему " что, если соединение будет прервано во время чата с сервером " неверным способом. Ответ таков: не на « запретить завершение процесса », а на « предвидеть проблемы с подключением и записывать аварийный код ошибки »!

Почему? Причина, очевидно, разрыв соединения может быть из-за сетевых проблем (вы не можете запретить своим пользователям отключать машину от сети), а не из-за прерывания работы клиента!

Почему вы не можете перехватить TerminateProcess?

А если вас беспокоит сбой приложения - просто используйте Application Restart & Recovery API .

3
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: