Winapi 为什么CreateProcessAsUser需要Vista/Windows 7上的交互式窗口站?

Winapi 为什么CreateProcessAsUser需要Vista/Windows 7上的交互式窗口站?,winapi,windows-7,windows-vista,process,impersonation,Winapi,Windows 7,Windows Vista,Process,Impersonation,我不得不深入研究这一点,因为在Windows2003/XP上运行良好的代码在Windows7上不起作用。使用CreateProcessAsUser启动的应用程序失败,错误代码为0xc0000142。我的旧代码和MSDN上的代码的区别在于,我没有设置特权,也没有设置到窗口站和桌面的权限。我已经根据示例更新了代码,但我非常想了解较新Windows中的哪些更改使得在interactive Window station中运行进程成为一项要求?至少有一部分要求源自在不同于服务的会话中运行交互进程的更改。这

我不得不深入研究这一点,因为在Windows2003/XP上运行良好的代码在Windows7上不起作用。使用CreateProcessAsUser启动的应用程序失败,错误代码为0xc0000142。我的旧代码和MSDN上的代码的区别在于,我没有设置特权,也没有设置到窗口站和桌面的权限。我已经根据示例更新了代码,但我非常想了解较新Windows中的哪些更改使得在interactive Window station中运行进程成为一项要求?

至少有一部分要求源自在不同于服务的会话中运行交互进程的更改。这样做是为了使应用程序不能对特权服务运行“粉碎”式攻击。更多信息可用。

是的,我在研究这个问题时偶然发现了这一点。不过,这与这个问题并不完全相关。在普通可执行文件使用CreateProcessAsUser启动另一个进程的场景中,Windows 7和Windows 2003/XP上会发生一些不同的情况,因为在XP上,进程成功启动,而在较新的操作系统上,由于0xc0000142而失败。显然,这个过程并没有进入交互式会话,因为如果我按照MSDN示例这样做,它就可以正常启动。我很想知道自XP以来实际发生了什么以及发生了什么变化。问题仍然存在。我也在寻找解决办法。会话0是游戏的名称。会话0中运行的任何进程都无法创建GUI实例。交互式客户端运行-但不显示GUI!正如我在文章中所说,我只是根据MSDN示例更改了代码。亨利,注意我的过程是命令行的,没有终端。所以我仍然想知道为什么我需要一个交互式会话来运行它。