2009-08-25 56 views
2

我想阻止用户关闭或重新启动系统。我的应用程序作为Win32本地服务(由C++编写)和LocalSystem帐户下运行。如何防止系统在Win32服务中关闭或重新启动?

我听说过WM_QUERYENDSESSION它的解决方案:创建一个隐藏窗口并捕获WM_QUERYENDSESSION以防止关闭。

但这种解决方案不是很干净,还必须为每个桌面创建一个窗口。所以我不得不枚举桌面,也关心桌面创建/删除的时间。所有这些使情况变得令人讨厌!

有没有办法检测关机/重启事件并防止系统关机/重启?

(事件是关机或重新启动它并不重要,他们都必须取消!)

+0

现在,如果你可以防止自发的重新启动,你真的有东西! – 2009-08-25 15:27:39

+0

@hoohoo:当然,我不打算这样做! – Isaac 2009-08-26 19:41:19

回答

1

你不能。

因为允许程序防止关机/重启会有点安全漏洞,您不觉得吗?

如果用户告诉系统关闭或重新启动,那将会发生什么。

顺便说一句,WM_QUERYENDSESSION是当前用户注销Windows时传递的。这是一个通知,没有更多,如果你以任何其他方式使用它,那么你错误地使用它。

+0

我正在开发一个管理网吧的软件。 其中一项软件功能必须防止系统关闭。所以我不需要100%的解决方案,但它应该防止关机是常规情况。 所以在这种情况下,它不是安全漏洞。 – Isaac 2009-08-25 17:12:52

+0

微软不关心什么是最适合一个人的;他们关心大多数用户的最佳选择。允许程序防止重新启动/关闭绝对是大多数Windows计算机的安全漏洞。 如果确实需要这种功能,则应查看组策略设置以禁用“开始”菜单中的重新启动/关闭。或者,请联系以下其中一个实用程序的作者: http://www.raymond.cc/blog/archives/2008/09/25/prevent-cancel-and-abort-a-windows-system-shutdown-或重新启动时,应用程序运行/ – 2009-08-26 06:19:50

+0

我需要一种方法来防止关闭只是当我想要的。有时应该允许关机,有时应该防止关机。 组策略在资源管理器上应用规则。所以当我更改策略时,我必须重新启动Explorer.Exe。所以我必须检测当前用户并用它的令牌Imprestonate它和CreateProcess。 对吗? – Isaac 2009-08-26 17:13:01

相关问题