用户可以直接在 Microsoft Vista 上与服务交互吗?
Posted
技术标签:
【中文标题】用户可以直接在 Microsoft Vista 上与服务交互吗?【英文标题】:Can users interact with services directly on Microsoft Vista? 【发布时间】:2009-05-20 19:55:46 【问题描述】:来自 Microsoft 网站(请参阅 msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx)清楚地表明“服务无法直接与 Windows Vista 中的用户交互”。
所以我决定使用“psexec -s cmd.exe”进行测试。据我所知,“psexec”会创建一个服务以打开命令提示符。不用说它奏效了。然后我决定将“EnumWinSta GUI”与 psexec 结合使用来切换到 winlogon 桌面。令我惊讶的是,我什至可以在这个桌面上启动“cmd.exe”。这是否意味着从服务创建的新流程可以是交互式的?
还是因为 psexec 做了某种黑魔法?如果有,它是如何做到的?
我试图在 Vista 和 XP 中将服务中的全屏窗口显示到 winlogon 桌面对象中。
【问题讨论】:
为什么要用全屏窗口覆盖winlogon桌面?这听起来像是恶意软件试图欺骗登录 UI。 这是用于紧急通知,例如建筑物发生火灾...... 【参考方案1】:在服务中运行的代码不能直接与交互式会话交互。
但是,作为具有足够权限的服务运行的代码可以创建一个在特定用户桌面内运行的新进程 - 例如,获取交互式会话的用户令牌并调用 CreateProcessAsUser。
您可以使用 WTSGetActiveConsoleSessionId 获取活动控制台会话,即实际在计算机上的用户的会话。然后可以使用 WTSQueryUserToken 获取令牌。
您的服务还可以在其处理函数中使用会话更改通知来查看用户何时登录/注销、解锁他们的会话等。
【讨论】:
如何获取交互式会话的用户令牌?以上是关于用户可以直接在 Microsoft Vista 上与服务交互吗?的主要内容,如果未能解决你的问题,请参考以下文章
Windows Vista/7:如何对输出音频混合进行采样?