Создание защищённой службы
0) Пользователи не должны иметь возможности при-/остановить, перезапустить и удалить службу.
1) Если процесс был принудительно завершён, служба должна перезапуститься.
2) Служба должна отслеживать состояние идентифицирующей её записив реестре и при необходимости отменять внесённые изменения.
Возможность управления службой, насколько мне известно, задаётся через SetServiceStatus: dwControlsAccepted не должно содержать SERVICE_ACCEPT_PAUSE_CONTINUE и SERVICE_ACCEPT_STOP. Но как сделать запрет на изменение типа запуска службы (как у RPCSS, например), я не знаю. Возможность перезапуска, насколько я понимаю, устанавливается через ChangeServiceConfig2 и структуру SERVICE_FAILURE_ACTIONS.
Далее, безопасность. Как я понимаю, надо защитить раздел в реестре, хранящий информацию о службе. В этом поможет SetServiceObjectSecurity, где я уберу возможность администратору и остальным пользователям хоть что-то делать со службой, оставив только системную учётную запись (вопрос — какую именно?). Отслеживание изменений в ключе реестра мне известно только посредством RegNotifyChangeKeyValue, но как с помощью неё узнать, что именно было изменено?
Короче, куча вопросов по этой теме у меня, и чтение MSDN пока не дало мне ответа на многие из них.