会话0隔离

时间:2009-01-21 20:58:34

标签: windows-vista service vista-security session-0-isolation

Vista推出了一个新的安全措施,阻止Session 0访问视频卡等硬件,用户不再登录会话0.我知道这意味着我无法向用户显示GUI,但是,这也意味着我根本不能显示一个?我的代码现在的设置方式,只是让它成为命令行会更多,但是如果我可以使用我现有的代码并且只是以编程方式管理GUI,那么代码就会少得多。

这可能吗?

来自MSDN的文章说:

  

•服务尝试在会话0中创建用户界面(UI),例如对话框。由于用户未在会话0中运行,因此他或她从未看到UI,因此无法提供输入该服务正在寻找。该服务似乎停止运行,因为它正在等待未发生的用户响应。

这让我觉得有可能拥有一个自动化的用户界面,但是有人告诉我你不能将SendKeys与服务一起使用,因为它在Session 0中被禁用了。

编辑:我实际上并不需要向用户显示GUI

3 个答案:

答案 0 :(得分:1)

你可以展示一个;它只是没有出现。

任务栏中有一些关于存在GUI窗口和切换到它的方法的通知。

无论如何,实际上有一个TerminalServices API命令来切换你可以调用的活动会话,如果你真的需要它来显示它。

答案 1 :(得分:0)

您可以编写一个单独的流程,为您的服务流程提供UI。您的UI和服务流程之间的通信可以通过各种方式进行(在Web上搜索“进程间通信”或“IPC”)。

答案 2 :(得分:0)

您的服务可以拥有GUI。只是没有人会看到它。正如MSDN引用所示,服务可以显示一个对话框。对MessageBox的调用不会失败;它永远不会回来 - 没有人按下按钮。

我不确定你想要“管理GUI”是什么意思。你真的是指假装向控件发送输入,就像使用SendInput一样吗?我认为没有理由不可能;毕竟,你会将输入注入你自己的程序队列,而SendInput's Vista-specific warnings没有说明任何事情。但我认为你会让事情变得比他们需要的要复杂得多。重新审视将程序改为根本没有UI的想法。 (这与拥有控制台程序不同。控制台是UI。)

例如,不是模拟单击按钮所需的鼠标消息,而是消除中间人并直接调用按钮单击事件所调用的函数。