用户可以直接在Microsoft Vista上与服务进行交互吗?

时间:2009-05-20 19:55:46

标签: winapi windows-services windows-vista winlogon

从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桌面对象中。

1 个答案:

答案 0 :(得分:3)

在服务中运行的代码不能直接与交互式会话交互。

但是,作为具有足够权限的服务运行的代码可以创建在特定用户桌面内运行的新进程 - 例如,获取交互式会话的用户令牌并调用CreateProcessAsUser。

您可以使用WTSGetActiveConsoleSessionId来获取活动控制台会话,即实际在计算机上的用户的会话。然后可以使用WTSQueryUserToken来获取令牌。

您的服务还可以在其处理程序功能中使用会话更改通知,以查看用户何时登录/注销,解锁其会话等。