Как предотвратить выключение или перезагрузку системы в службе Win32?
-
19-09-2019 - |
Вопрос
я хочу запретить пользователям выключать или перезагружать систему.мое приложение работает как собственная служба Win32 (написанная на C++) и под учетной записью LocalSystem.
я слышал о WM_QUERYENDSESSION, это решение:создание скрытого окна и захват WM_QUERYENDSESSION для предотвращения завершения работы.
но это решение не совсем чистое и требует создания одного окна для каждого рабочего стола.Поэтому мне нужно перечислить рабочие столы, а также позаботиться о том, когда рабочий стол создавался/удалялся.Все это усложняет ситуацию!
Есть ли способ обнаружить событие выключения/перезапуска и предотвратить выключение/перезапуск системы?
(Не важно, завершение события или перезапуск, оба они должны быть отменены!)
Решение
Вы не можете.
Потому что разрешение программам предотвращать выключение/перезапуск было бы своего рода уязвимостью в безопасности, вы не думаете?
Если пользователь прикажет системе выключиться или перезагрузиться, именно это и произойдет.
Кстати, WM_QUERYENDSESSION передается, когда текущий пользователь выходит из Windows.Это уведомление, не более того, и если вы используете его по-другому, значит, вы используете его неправильно.