【问题标题】:Session 0 Isolation会话 0 隔离
【发布时间】:2009-01-21 20:58:33
【问题描述】:
Vista 推出了一项新的安全措施,防止会话 0 访问视频卡等硬件,并且用户不再登录会话 0。我知道这意味着我无法向用户显示 GUI,但是,这是否也意味着我一个都不能显示?我的代码现在设置的方式,只使它成为命令行会做更多的工作,但是如果我可以使用我现有的代码并以编程方式管理 GUI,它将需要更少的代码。
这可能吗?
来自 MSDN 的文章是这样说的:
• 服务尝试在会话 0 中创建用户界面 (UI),例如对话框。由于用户未在会话 0 中运行,因此他或她永远看不到 UI,因此无法提供输入服务正在寻找。该服务似乎停止运行,因为它正在等待未发生的用户响应。
这让我觉得有可能拥有一个自动化的 UI,但有人告诉我你不能将 SendKeys 与服务一起使用,因为它在 Session 0 中被禁用。
编辑:我实际上不需要向用户展示 GUI
【问题讨论】:
标签:
windows-vista
service
vista-security
session-0-isolation
【解决方案1】:
你可以展示一个;它只是没有显示出来。
任务栏中有一个关于有一个 GUI 窗口和切换到它的方法的小通知。
不管怎样,实际上有一个 TerminalServices API 命令来切换活动会话,如果你真的需要它显示,你可以调用它。
【解决方案2】:
您可以编写一个单独的流程,为您的服务流程提供 UI。您的 UI 和服务进程之间的通信可以通过多种方式完成(在 Web 上搜索“进程间通信”或“IPC”)。
【解决方案3】:
您的服务可以有一个 GUI。只是没有人会看到它。正如 MSDN 引用所暗示的,服务可以显示一个对话框。对MessageBox 的调用不会失败;它永远不会回来——不会有人按下它的按钮。
我不确定您想要“管理 GUI”是什么意思。你的意思是假装向控件发送输入,就像SendInput 一样?我看不出它不可能的理由。毕竟,您会将输入注入您自己的程序队列中,而SendInput's Vista-specific warnings 对此不做任何说明。但我认为你会让事情变得比他们需要的复杂得多。重新考虑将程序更改为完全没有 UI 的想法。 (这与拥有控制台程序不同。控制台是 UI。)
而不是模拟单击按钮所需的鼠标消息,例如,消除中间人并简单地直接调用按钮单击事件将调用的函数。