4

我到处搜索并尝试了几乎所有东西,我开始认为这是不可能的。我有一个在会话 0 (win7) 中作为 SYSTEM 运行的服务。我需要启动一个外部应用程序。如果我只是以 SYSTEM 身份启动外部应用程序,应用程序就会启动并且我可以看到 GUI(如果我使用 UI0Detect 单击会话 0)。除了我能够看到它之外,我启动应用程序的服务实际上可以截取 GUI 的屏幕截图并将其发送回我的服务器。- 在这一点上一切都很好。

问题 - 在某些情况下,不允许外部应用程序在 SYSTEM 上下文下运行。在这些情况下,我必须以其他用户身份启动。我在会话 0 中以实际用户身份运行另一个服务。然后我以该其他用户身份启动外部应用程序。外部应用程序在会话 0 中启动,我指定 WinSta0\Default 以确保应用程序 GUI 在我的 SYSTEM 服务可以看到的同一桌面上启动。当发生这种情况时,UI0Detect 会弹出给我的印象是我会点击并查看我的窗口。当我进入会话 0 或当我的服务尝试截屏时,只有一个小黑匣子。几乎就像只有 SYSTEM 帐户可以在会话 0 中呈现窗口 - 这是真的吗?有人知道在会话 0 中运行的用户帐户是否能够呈现 GUI?

我不是在寻找有关如何将应用程序从会话 0 启动到活动用户桌面的代码。这是有据可查的。我需要知道的是如何实现反向(有点)。我需要从 SYSTEM 以外的帐户在会话 0 中启动 GUI。

4

1 回答 1

2

来自MSDN:“如果服务类型指定 SERVICE_INTERACTIVE_PROCESS,则服务必须在 LocalSystem 帐户中运行。”

所以没有支持的方式来做你想做的事情。但是,可以通过让以 SYSTEM 身份运行的服务来更改相关桌面(可能还有窗口站)上的权限来使其工作。请记住,以这种方式共享桌面意味着如果有问题的应用程序或用户帐户遭到入侵,它可能会破坏系统帐户。

或者,您可以尝试在会话 0 中创建一个新桌面(具有适当的权限)并在那里启动应用程序。我不确定交互式用户是否能够看到此桌面,但您可以通过在同一桌面(最好在同一用户上下文中)启动另一个应用程序来代表您截取屏幕截图。

于 2012-07-19T19:46:45.343 回答