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

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

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

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

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

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

【问题讨论】:

  • 现在,如果你能防止自发重启,你真的会有所收获!
  • @hoohoo:我当然不会这样做!

标签: service events shutdown restart power-management


【解决方案1】:

你不能。

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

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

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

【讨论】:

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