2009-08-25 5 views
2

Я хочу, чтобы пользователи не закрывали или не перезапускали систему. мое приложение запускается как родной сервис Win32 (написанный C++) и под учетной записью LocalSystem.Как предотвратить остановку или перезапуск системы в службе Win32?

Я слышал о WM_QUERYENDSESSION Это решение: создание скрытого окна и захват WM_QUERYENDSESSION для предотвращения выключения.

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

Есть ли способ обнаружить событие shutdown/restart и предотвратить выключение/перезапуск системы?

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

+0

Теперь, если вы можете предотвратить спонтанные перезагрузки, у вас действительно есть что-то! –

+0

@hoohoo: Конечно, я не собираюсь этого делать! – Isaac

ответ

1

Вы не можете.

Потому что разрешение программ на предотвращение выключения/перезапуска было бы чем-то вроде уязвимости безопасности, не так ли?

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

BTW, WM_QUERYENDSESSION передается, когда текущий пользователь выходит из системы Windows. Это уведомление, не более того, и если вы используете его каким-либо другим способом, вы используете его неправильно.

+0

Я разрабатываю программное обеспечение для управления киберкафе. Одной из функций программного обеспечения является предотвращение закрытия систем. Поэтому мне не нужно 100% -ное решение, но оно должно предотвращать закрытие обычных случаев. Так что в этом случае это не уязвимость системы безопасности. – Isaac

+0

Microsoft не заботится о том, что лучше для одного человека; они заботятся о том, что лучше для большинства их пользователей. Предотвращение перезапуска/остановки программ, безусловно, является уязвимостью безопасности для большинства компьютеров Windows. Если вам действительно нужна такая функциональность, вы должны посмотреть параметры групповой политики, чтобы отключить перезапуск/выключение из меню «Пуск». В качестве альтернативы обратитесь к автору одной из служебных программ: http://www.raymond.cc/blog/archives/2008/09/25/prevent-cancel-and-abort-a-windows-system-shutdown- или-restart-when-application-is-running/ –

+0

Мне нужен способ предотвратить остановку только тогда, когда я хочу. Иногда выключение должно быть разрешено, а иногда должно быть предотвращено. Групповая политика применяет правила к проводнику. Поэтому, когда я меняю политику, мне нужно перезапустить Explorer.Exe. Поэтому я должен обнаружить текущего пользователя и Imprestonate и CreateProcess с его токеном. Я прав? – Isaac