如何防止系统在 Win32 服务中关闭或重新启动?

Posted

技术标签:

【中文标题】如何防止系统在 Win32 服务中关闭或重新启动?【英文标题】:How to Prevent System from Shutting down or Restart in a Win32 service? 【发布时间】:2009-08-25 15:23:15 【问题描述】:

我想阻止用户关闭或重新启动系统。我的应用程序作为 Win32 Native Service(由 C++ 编写)在 LocalSystem 帐户下运行。

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

但是这个解决方案不是很干净,还必须为每个桌面创建一个窗口。所以我必须枚举桌面并关心桌面何时创建/销毁。所有这些都让情况变得糟糕!

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

(事件是关闭还是重启并不重要,都必须取消!)

【问题讨论】:

现在,如果你能防止自发重启,你真的会有所收获! @hoohoo:我当然不会这样做! 【参考方案1】:

你不能。

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

如果用户告诉系统关闭或重新启动,就会发生这种情况。

顺便说一句,WM_QUERYENDSESSION 在当前用户退出 Windows 时传递。这是一个通知,仅此而已,如果您以任何其他方式使用它,那么您就是错误地使用它。

【讨论】:

我正在开发一个用于管理网吧的软件。其中一项软件功能必须是防止系统关闭。所以我不需要 100% 的解决方案,但它应该防止关机是常见的情况。所以在这种情况下,它不是安全漏洞。 微软不在乎什么对一个人最好;他们关心什么对他们的大多数用户来说是最好的。允许程序阻止重启/关闭对于大多数 Windows 计算机来说绝对是一个安全漏洞。如果您真的非常需要这种功能,您应该查看组策略设置以从“开始”菜单禁用重新启动/关闭。或者,联系其中一个实用程序的作者:raymond.cc/blog/archives/2008/09/25/… 我需要一种方法来防止在我想要的时候关机。有时应允许关闭,有时应防止关闭。组策略在 Explorer 上应用规则。因此,当我更改策略时,我必须重新启动 Explorer.Exe。因此,我必须检测当前用户并使用他的令牌对其进行 Imprestonate 和 CreateProcess。我说的对吗?

以上是关于如何防止系统在 Win32 服务中关闭或重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

win10vs2015安装文件无法启动

win7如何自动启动wlan autoconfig

win10无法启动服务原因可能是已被禁用或与其相关联的设备没有启动

如何在 azure 中关闭应用服务的一个实例

(32位)WIN7系统下安装SQL2000企业版,桌面右下角的服务无显示打开,金蝶K3中间层无法启动。如何解决??

如何防止在我的桌面上启动 TaskManager?