【问题标题】: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。)

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

        【讨论】:

          猜你喜欢
          • 2014-11-01
          • 1970-01-01
          • 2011-01-28
          • 1970-01-01
          • 1970-01-01
          • 2011-07-29
          • 2014-06-28
          • 2014-10-05
          • 2014-08-02
          相关资源
          最近更新 更多