绕过windows会话隔离,在windows 7+系统服务的用户会话中显示警告消息;

绕过windows会话隔离,在windows 7+系统服务的用户会话中显示警告消息;,windows,service,isolation,Windows,Service,Isolation,我希望在作为windows服务(作为localsystem)运行的应用程序显示模式警告时实现一个功能,类似于关机屏幕或UAC警告屏幕。基本上,这是不可能忽视的事情 有两件事我不知道如何实施: 据我所知,Windows Vista+不再允许应用程序生成系统模式窗口。有没有可能绕过这个问题,有没有简单的方法?我能想到的唯一选择是打开一个全屏窗口,截取alt+tab、ctrl+alt+del等等 我还认为,不可能在服务的用户会话中显示UI,因为它在另一个会话中运行。有没有黑客可以绕过它?我能想到的一件

我希望在作为windows服务(作为localsystem)运行的应用程序显示模式警告时实现一个功能,类似于关机屏幕或UAC警告屏幕。基本上,这是不可能忽视的事情

有两件事我不知道如何实施:

  • 据我所知,Windows Vista+不再允许应用程序生成系统模式窗口。有没有可能绕过这个问题,有没有简单的方法?我能想到的唯一选择是打开一个全屏窗口,截取alt+tab、ctrl+alt+del等等

  • 我还认为,不可能在服务的用户会话中显示UI,因为它在另一个会话中运行。有没有黑客可以绕过它?我能想到的一件事是:查找并将代码注入在给定会话中运行的csrss.exe或winlogon.exe,然后调用远程线程。另一种方法是使用。还有别的更简单的方法吗


  • 如果服务是作为本地系统运行的,那么这是获取令牌以在给定会话中运行代码的最简单方法

    <>而不是一个模态窗口,考虑创建一个新的桌面()并切换到它。您不能抑制control alt delete,但我相信当control alt delete菜单被取消时,系统通常会返回到您的桌面。所有其他特殊键序列都应该被抑制,因为挂钩只影响与安装它们的应用程序关联的桌面

  • 我不知道你说的“系统模式窗口”是什么意思。你是说即使在登录屏幕上也会显示给用户的消息吗

  • 这是正确的,即使在注册表中将UserInteractive设置为true,Vista和更高版本也不允许从服务访问Windows GUI。有几种方法可以解决这个问题,我这样做的方法是我有一个简单的助手应用程序,它在后台运行(不是作为一个服务,只是一个连续的进程),它使用IPC over.NET远程处理来处理简单的消息,服务可以轻松地连接和发送这些消息。如果您愿意,我可以发布一个更具体的示例,但现在这里是如何实现这一点的一步一步(在这个示例中,我将使用.NET远程处理,但相同的基本原则应适用于您使用的任何IPC解决方案):

  • 使用IPC协议创建一个充当.NET远程处理服务器(不是服务,只是一个连续进程)的程序。远程接口应至少包含一个成员以接受新数据,在大多数情况下,字符串对我来说可以正常工作。实现的类还应该能够连续处理新消息
  • 使用第一步中实现的远程接口连接到服务,并向IPC服务器发送要显示的消息
  • IPC服务应处理此消息,并使用首选方式向用户显示或向用户显示消息。我个人在一个单独的线程中使用一个模态表单,允许最终用户复制消息(如果他们愿意)

  • 虽然这种方法比在用户上下文中启动流程更简单,但请注意,它的效率较低;它需要一个额外的进程始终在用户上下文中运行。在我的例子中,我将侦听器插入了一个托盘应用程序中,该应用程序已用于管理/监视服务。是的,它确实需要始终运行另一个进程,但是因为我们已经有了另一个在用户登录时运行的进程,所以我只是将侦听器放在那里。当服务不是以LocalSystem帐户运行时,此技术也可以工作。