Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Служба, которую нельзя выключить


Автор: MadCoder 9.12.2008, 02:50
Подскажите, как написать службу, которую нельзя выключить. Обычный службы писать умею, но как сделать так, чтобы остановить или запаузить пользователем (через интерфейс "Службы") было нельзя (как например у Антивируса Касперского).

Автор: bartram 9.12.2008, 08:43
При создании сервиса в поле dwControlsAccepted структуры SERVICE_STATUS убрать флаг SERVICE_ACCEPT_STOP.
Для сведения: http://www.codenet.ru/progr/delphi/stat/services.php

Добавлено через 4 минуты и 1 секунду
Так же по аналогии с остановкой, для запрещения пуска убрать флаг SERVICE_ACCEPT_PAUSE_CONTINUE соответственно.

Автор: CodeMonkey 9.12.2008, 09:25
В тему: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1348.

Автор: Cashey 9.12.2008, 17:06
Любую службу можно убить, если удалить ее запускаемый файл, который можно посмотреть в свойствах службы

Автор: Riply 9.12.2008, 19:02
Цитата(Cashey @  9.12.2008,  17:06 Найти цитируемый пост)
Любую службу можно убить, если удалить ее запускаемый файл, который можно посмотреть в свойствах службы 


Попробую обобщить: Супротив администратора никак,  даже с ломом smile
(Варианты физическои порчи системы не рассматриваем smile )

Автор: MadCoder 10.12.2008, 00:13
Спасибо за информацию, помогла smile . Однако программу все еще можно выключить непосредственно через TaskManager. 
Возможно ли запретить завершение процесса пользователем?

Автор: Riply 10.12.2008, 00:26
Цитата(MadCoder @  10.12.2008,  00:13 Найти цитируемый пост)
Возможно ли запретить завершение процесса пользователем? 


Обычному пользователю, например, настройкой прав.
А админу (вынуждена повториться) ты запретить ничего не сможешь.

Автор: bartram 10.12.2008, 10:05
Цитата(MadCoder @  10.12.2008,  02:13 Найти цитируемый пост)
Возможно ли запретить завершение процесса пользователем? 

Можно и админу запретить, но это уже из другой оперы smile и в другой теме smile

Автор: CodeMonkey 10.12.2008, 10:09
http://blog.delphi-jedi.net/2008/11/08/restrict-access-to-process/ (из JWSCL). 

Автор: Riply 10.12.2008, 15:36
Цитата(bartram @  10.12.2008,  10:05 Найти цитируемый пост)
Можно и админу запретить


Админ всегда может вернуть, то что ему запретили
или это уже не админ smile


Цитата(bartram @  10.12.2008,  10:05 Найти цитируемый пост)
но это уже из другой оперы  и в другой теме 


Често говоря, не вижу путей кроме порчи системы или
переведение ее в "жизне-зависимое состояние" от нашего процесса.

Автор: MadCoder 10.12.2008, 16:30
А как же тот же Каспер или системные процессы, они пишут, что нет доступа к завершению процесса.

Автор: Riply 10.12.2008, 16:43
Цитата(MadCoder @  10.12.2008,  16:30 Найти цитируемый пост)
А как же тот же Каспер или системные процессы, они пишут, что нет доступа к завершению процесса. 


Дай своему процессу привилегии системы ( админу это сделать - раз плюнуть smile ) - многое станет гораздо проще.
Каспер, несмотря на все его заявления о "невозможности закрытия",
тоже прибивается за милую душу, но 
Цитата(bartram @  10.12.2008,  10:05 Найти цитируемый пост)
но это уже из другой оперы  и в другой теме 


P.S.
 Может в последних версиях Каспер-а что-то и изменилось ( не смотрела ).

Автор: Romikgy 11.12.2008, 00:06
да команда at из консоли это руль , незнал, интересно залатают такую дырень? сорри за оффтоп

Автор: SneG0K 11.12.2008, 00:20
Переименуй в winlogon.exe и хоть убейся об компьютер, не выключишь...

Автор: Riply 11.12.2008, 01:05
Цитата(SneG0K @  11.12.2008,  00:20 Найти цитируемый пост)
Переименуй в winlogon.exe и хоть убейся об компьютер, не выключишь... 


Меня всегда удивляла закономерность:
чем безапелляционнее утверждение - тем оно ошибочнее smile

Автор: MadCoder 11.12.2008, 10:23
Я могу просто его скрыть из диспетчера задач, но это не вариант. Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин). 

Автор: dumb 11.12.2008, 10:39
Цитата(MadCoder @  11.12.2008,  11:23 Найти цитируемый пост)
Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин).  

это хуки. чем "ниже", тем лучше.

Автор: CodeMonkey 11.12.2008, 11:10
Цитата(MadCoder @  11.12.2008,  10:23 Найти цитируемый пост)
Я могу просто его скрыть из диспетчера задач, но это не вариант. Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин). 

Можете сказать, зачем это надо?

Автор: MadCoder 11.12.2008, 11:49
Я пишу программу из раздела "Безопасность", поэтому хочу ограничить возможность ее выключения например без ввода пароля.

Добавлено через 1 минуту
Прятаться от пользователя в общем-то неправильно, да и любое эвристическое обновление антивируса может перевести программу в разряд вирусов, если она прячется из диспетчера задач ).

Добавлено через 1 минуту и 54 секунды
Цитата(dumb @ 11.12.2008,  10:39)
Цитата(MadCoder @  11.12.2008,  11:23 Найти цитируемый пост)
Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин).  

это хуки. чем "ниже", тем лучше.

Поможешь ссылкой? Все, что я до сих пор видел и пробовал, не работает, админом все еще можно выключить.

Автор: bartram 11.12.2008, 12:35
Цитата(MadCoder @  11.12.2008,  13:49 Найти цитируемый пост)
Поможешь ссылкой? Все, что я до сих пор видел и пробовал, не работает, админом все еще можно выключить. 

http://wasm.ru/series.php?sid=8
Вопросы уже в другой тебе т.к.  Один топик - один вопрос, или же в поиск, уже не однократно обсуждалось.

Автор: CodeMonkey 11.12.2008, 12:47
Цитата(MadCoder @  11.12.2008,  11:49 Найти цитируемый пост)
Я пишу программу из раздела "Безопасность"

Всё, что "из раздела безопасность" делается настройкой прав, а не через одно место, как хотите вы.

Цитата(MadCoder @  11.12.2008,  11:49 Найти цитируемый пост)
поэтому хочу ограничить возможность ее выключения например без ввода пароля.

Ну и чем это отличается от необходимости ввести пароль учётки, у которой есть право на перезапуск?

Цитата(MadCoder @  11.12.2008,  10:23 Найти цитируемый пост)
Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин). 

Этим вы только поимеете себе кучу проблем.
Можете сразу навесить на свою программу ярлык "скорее всего перестанет работать при ближайшем обновлении системы".

Автор: MadCoder 11.12.2008, 18:23
- CodeMonkey, не все smile .
- В том, что программа расчитана на ноутбуки. Пароля для учетки там может и не быть, а пользователь заходить под админской записью. Давайте опустим обсуждение конечных пользователей.
- Почему она перестанет работать?

Автор: bartram 11.12.2008, 18:41
Цитата(MadCoder @  11.12.2008,  20:23 Найти цитируемый пост)
- Почему она перестанет работать? 

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

Автор: CodeMonkey 12.12.2008, 10:12
Цитата(MadCoder @  11.12.2008,  18:23 Найти цитируемый пост)
- В том, что программа расчитана на ноутбуки. Пароля для учетки там может и не быть, а пользователь заходить под админской записью. Давайте опустим обсуждение конечных пользователей.

Ну так надо завести учётную запись пользователя с паролем. И админскую с паролем. Так и надо делать. Систему безопасности, учётные записи и разделение прав вводят не просто так, а именно затем, чтобы их использовали. Если у вас не хватает квалификации это настроить - это уже другой вопрос.

P.S. Вообще я смысла тогда не вижу: ноутбук и пароль на перезагрузку? Полный бред. У пользователя уже есть физический доступ к системе. Вытащил батарею и/или зажал Power на энцать секунд - и всё.

Цитата(MadCoder @  11.12.2008,  18:23 Найти цитируемый пост)
- Почему она перестанет работать?

http://transl-gunsmoker.blogspot.com/2008/12/blog-post_6030.html
http://transl-gunsmoker.blogspot.com/2008/12/shell-folders.html
http://transl-gunsmoker.blogspot.com/2008/12/blog-post_6452.html
http://blogs.msdn.com/oldnewthing/archive/2004/02/16/73780.aspx
http://blogs.msdn.com/oldnewthing/archive/2004/07/22/191123.aspx

Автор: MadCoder 12.12.2008, 11:34
CodeMonkey, если у Вас не хватает квалификации прочитать мое сообщение выше и понять, что программа будет поставляться конечным пользователям, которые в большинстве своем не используют пароли для ноутбуков, тогда пишу это в третий раз, специально для Вас:
"программа будет поставляться конечным пользователям, которые в большинстве своем не используют пароли для учеток ноутбуков, не являются опытными администраторами и не создают десять тысяч учеток с разными правами, особенно если компьютер используется 1 пользователем"

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

Цитата(CodeMonkey @  12.12.2008,  10:12 Найти цитируемый пост)
P.S. Вообще я смысла тогда не вижу: ноутбук и пароль на перезагрузку? Полный бред. У пользователя уже есть физический доступ к системе. Вытащил батарею и/или зажал Power на энцать секунд - и всё.


Я ничего про перезагрузку и не говорил.

Автор: CodeMonkey 12.12.2008, 13:06
Цитата(MadCoder @  12.12.2008,  11:34 Найти цитируемый пост)
Я не хочу использовать недокументированные возможности и возможности, которые могут привести к нестабильной работе системы (такие, как внедрение в чужой код например).

http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx:
Цитата
A process cannot prevent itself from being terminated.

Ясна официальная позиция?
Посмотрите ещё две последние ссылки в моём предыдущем посте.

Цитата(MadCoder @  12.12.2008,  11:34 Найти цитируемый пост)
Я ничего про перезагрузку и не говорил.

Упс, прошу прощения, неверно прочитал вот это:
Цитата(MadCoder @  11.12.2008,  11:49 Найти цитируемый пост)
возможность ее выключения например без ввода пароля


P.S. 
Цитата(MadCoder @  12.12.2008,  11:34 Найти цитируемый пост)
если у Вас не хватает квалификации прочитать мое сообщение выше и понять, что программа будет поставляться конечным пользователям, которые в большинстве своем не используют пароли для ноутбуков

Ну простите меня за то, что я не могу читать ваши мысли ;)

Автор: MadCoder 12.12.2008, 14:10
не вижу ничего плохого в том, чтобы запретить пользователю, который не знает пароля (ведь он его писал, когда инсталировал программу) или другому приложению запретить выключение моей программы.

Автор: Riply 12.12.2008, 15:40
Цитата(MadCoder @  12.12.2008,  14:10 Найти цитируемый пост)
не вижу ничего плохого в том, чтобы запретить пользователю, который не знает пароля (ведь он его писал, когда инсталировал программу) или другому приложению запретить выключение моей программы. 


Надеюсь, ты не будешь утверждать, что твоя программа будет без ошибок ?
А пользователь, тем более хозяин компьютера (ноутбука)
всегда должен иметь возможность снять глючный процесс и без всякого пароля smile

Даже Microsof "позволяет" убивать жизненно важные (!)  для работы системы процессы.
Правда потом получаем BSOD, но это уже другой разговор smile

Автор: MadCoder 12.12.2008, 16:12
Ввиду невозможности штатными способами запрета любому пользователю выключения процесса через диспетчер задач констатирую, что буду делать программу как сервис с (увы) возможностью отключения через диспетчер задач (хотя это противоречит логике работы программы)...
Всем спасибо за помощь, действительно помогли smile .

Автор: CodeMonkey 12.12.2008, 16:25
offtopic:

http://blogs.msdn.com/oldnewthing/archive/2008/03/21/8328132.aspx:

Раз:
Цитата(MadCoder @  9.12.2008,  02:50 Найти цитируемый пост)
Подскажите, как написать службу, которую нельзя выключить.


Два:
Цитата(MadCoder @  10.12.2008,  00:13 Найти цитируемый пост)
Возможно ли запретить завершение процесса пользователем?/Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин).


Три:
Цитата(MadCoder @  12.12.2008,  14:10 Найти цитируемый пост)
не вижу ничего плохого в том, чтобы запретить пользователю, который не знает пароля (ведь он его писал, когда инсталировал программу) или другому приложению запретить выключение моей программы


 smile

Автор: MadCoder 12.12.2008, 16:53
1. Информацию по служба я успешно использовал
2. Я понял, что не имеет смысла запрещать завершение, т.к. нет официальных методов сделать этого, не нарушив работу системы и совместимость с разными версиями Windows.
3. Все еще не вижу ничего плохого =).

Автор: bartram 12.12.2008, 17:02
Т.к. обсуждение пошло несколько в другую сторону, а основной вопрос решен, то предлагаю пожеланию разговор продолжить уже в другой теме.
Тема Закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)