【问题标题】:Why CreateProcessAsUser requires interactive window station on Vista/Windows 7?为什么 CreateProcessAsUser 在 Vista/Windows 7 上需要交互式窗口站?
【发布时间】:2010-12-06 02:59:13
【问题描述】:

我不得不深入研究这一点,因为在 Windows 2003/XP 上运行良好的代码在 Windows 7 上却没有。使用 CreateProcessAsUser 启动的应用程序失败,错误代码为 0xc0000142。我的旧代码和 MSDN Starting an Interactive Client Process in C++ 提供的代码之间的区别在于我没有设置权限以及 Window Station 和桌面。我已根据示例更新了我的代码,但我非常想了解较新 Windows 中的哪些更改要求在交互式 Window 站中运行进程?

【问题讨论】:

  • 问题依然存在。我也在寻找解决方案。会话 0 隔离是游戏的名称。在会话 0 中运行的任何进程都无法创建 GUI 实例。交互式客户端运行 - 但没有显示 GUI!
  • 正如我在帖子中所说,我只是根据 MSDN 示例更改了我的代码。亨利,请注意,我的进程是命令行进程,没有终端。所以我仍然想知道为什么我需要一个交互式会话来运行它。

标签: winapi windows-7 windows-vista process impersonation


【解决方案1】:

至少部分需求源自在与服务不同的会话中运行交互式流程的更改。这样做是为了使应用程序无法对特权服务运行“粉碎”式攻击。更多信息请访问here

【讨论】:

  • 是的,我在研究这个问题时偶然发现了这一点。不过,这与问题并不完全相关。在 普通 可执行文件使用 CreateProcessAsUser 启动另一个进程的情况下,在 Windows 7 和 Windows 2003/XP 上会发生不同的情况,因为在 XP 进程上成功启动并在较新的操作系统上失败并出现 0xc0000142。显然,该过程不会进入交互式会话,因为如果我根据 MSDN 示例让它这样做,它就会开始正常。我很想知道自 XP 以来实际发生了什么以及发生了什么变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多