| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| Любую службу можно убить, если удалить ее запускаемый файл, который можно посмотреть в свойствах службы |
| Автор: MadCoder 10.12.2008, 00:13 |
| Спасибо за информацию, помогла Возможно ли запретить завершение процесса пользователем? |
| Автор: Riply 10.12.2008, 00:26 |
Обычному пользователю, например, настройкой прав. А админу (вынуждена повториться) ты запретить ничего не сможешь. |
| Автор: bartram 10.12.2008, 10:05 |
Можно и админу запретить, но это уже из другой оперы |
| Автор: 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 |
Админ всегда может вернуть, то что ему запретили или это уже не админ Често говоря, не вижу путей кроме порчи системы или переведение ее в "жизне-зависимое состояние" от нашего процесса. |
| Автор: MadCoder 10.12.2008, 16:30 |
| А как же тот же Каспер или системные процессы, они пишут, что нет доступа к завершению процесса. |
| Автор: Riply 10.12.2008, 16:43 | ||
Дай своему процессу привилегии системы ( админу это сделать - раз плюнуть Каспер, несмотря на все его заявления о "невозможности закрытия", тоже прибивается за милую душу, но P.S. Может в последних версиях Каспер-а что-то и изменилось ( не смотрела ). |
| Автор: Romikgy 11.12.2008, 00:06 |
| да команда at из консоли это руль , незнал, интересно залатают такую дырень? сорри за оффтоп |
| Автор: SneG0K 11.12.2008, 00:20 |
| Переименуй в winlogon.exe и хоть убейся об компьютер, не выключишь... |
| Автор: Riply 11.12.2008, 01:05 | ||
Меня всегда удивляла закономерность: чем безапелляционнее утверждение - тем оно ошибочнее |
| Автор: MadCoder 11.12.2008, 10:23 |
| Я могу просто его скрыть из диспетчера задач, но это не вариант. Пользователь должен видеть процесс, но не должен иметь возможность ее выключить (даже если он мегаадмин). |
| Автор: dumb 11.12.2008, 10:39 | ||
это хуки. чем "ниже", тем лучше. |
| Автор: CodeMonkey 11.12.2008, 11:10 | ||
Можете сказать, зачем это надо? |
| Автор: MadCoder 11.12.2008, 11:49 | ||||
| Я пишу программу из раздела "Безопасность", поэтому хочу ограничить возможность ее выключения например без ввода пароля. Добавлено через 1 минуту Прятаться от пользователя в общем-то неправильно, да и любое эвристическое обновление антивируса может перевести программу в разряд вирусов, если она прячется из диспетчера задач ). Добавлено через 1 минуту и 54 секунды
Поможешь ссылкой? Все, что я до сих пор видел и пробовал, не работает, админом все еще можно выключить. |
| Автор: bartram 11.12.2008, 12:35 | ||
http://wasm.ru/series.php?sid=8 Вопросы уже в другой тебе т.к. Один топик - один вопрос, или же в поиск, уже не однократно обсуждалось. |
| Автор: CodeMonkey 11.12.2008, 12:47 | ||||
Всё, что "из раздела безопасность" делается настройкой прав, а не через одно место, как хотите вы.
Ну и чем это отличается от необходимости ввести пароль учётки, у которой есть право на перезапуск?
Этим вы только поимеете себе кучу проблем. Можете сразу навесить на свою программу ярлык "скорее всего перестанет работать при ближайшем обновлении системы". |
| Автор: MadCoder 11.12.2008, 18:23 |
| - CodeMonkey, не все - В том, что программа расчитана на ноутбуки. Пароля для учетки там может и не быть, а пользователь заходить под админской записью. Давайте опустим обсуждение конечных пользователей. - Почему она перестанет работать? |
| Автор: bartram 11.12.2008, 18:41 |
Потому что, возможно те недокументированные возможности системы, которые ты будешь использовать при построении данной схемы защиты своей проги, могут быть закрыты в следующей версии сервиспака или операционной системы. Ну или возможно надо будет вносить какие-то глобальные изменения в код. |
| Автор: CodeMonkey 12.12.2008, 10:12 | ||
Ну так надо завести учётную запись пользователя с паролем. И админскую с паролем. Так и надо делать. Систему безопасности, учётные записи и разделение прав вводят не просто так, а именно затем, чтобы их использовали. Если у вас не хватает квалификации это настроить - это уже другой вопрос. P.S. Вообще я смысла тогда не вижу: ноутбук и пароль на перезагрузку? Полный бред. У пользователя уже есть физический доступ к системе. Вытащил батарею и/или зажал Power на энцать секунд - и всё. 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, 13:06 | ||||||
http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx:
Ясна официальная позиция? Посмотрите ещё две последние ссылки в моём предыдущем посте. Упс, прошу прощения, неверно прочитал вот это: P.S.
Ну простите меня за то, что я не могу читать ваши мысли ;) |
| Автор: MadCoder 12.12.2008, 14:10 |
| не вижу ничего плохого в том, чтобы запретить пользователю, который не знает пароля (ведь он его писал, когда инсталировал программу) или другому приложению запретить выключение моей программы. |
| Автор: Riply 12.12.2008, 15:40 | ||
Надеюсь, ты не будешь утверждать, что твоя программа будет без ошибок ? А пользователь, тем более хозяин компьютера (ноутбука) всегда должен иметь возможность снять глючный процесс и без всякого пароля Даже Microsof "позволяет" убивать жизненно важные (!) для работы системы процессы. Правда потом получаем BSOD, но это уже другой разговор |
| Автор: MadCoder 12.12.2008, 16:12 |
| Ввиду невозможности штатными способами запрета любому пользователю выключения процесса через диспетчер задач констатирую, что буду делать программу как сервис с (увы) возможностью отключения через диспетчер задач (хотя это противоречит логике работы программы)... Всем спасибо за помощь, действительно помогли |
| Автор: CodeMonkey 12.12.2008, 16:25 | ||||
| offtopic: http://blogs.msdn.com/oldnewthing/archive/2008/03/21/8328132.aspx: Раз: Два:
Три:
|
| Автор: MadCoder 12.12.2008, 16:53 |
| 1. Информацию по служба я успешно использовал 2. Я понял, что не имеет смысла запрещать завершение, т.к. нет официальных методов сделать этого, не нарушив работу системы и совместимость с разными версиями Windows. 3. Все еще не вижу ничего плохого =). |
| Автор: bartram 12.12.2008, 17:02 |
| Т.к. обсуждение пошло несколько в другую сторону, а основной вопрос решен, то предлагаю пожеланию разговор продолжить уже в другой теме. Тема Закрыта |