Winapi 用户能否直接在Microsoft Vista上与服务交互?

Winapi 用户能否直接在Microsoft Vista上与服务交互?,winapi,windows-services,windows-vista,winlogon,Winapi,Windows Services,Windows Vista,Winlogon,从微软网站(见)上可以清楚地看到“在WindowsVista中,服务无法直接与用户交互” 因此,我决定使用“psexec-scmd.exe”来测试这一点。据我所知,“psexec”创建一个服务以打开命令提示符。不用说它起作用了。然后我决定将“EnumWinSta GUI”与psexec结合使用,切换到winlogon桌面。令我惊讶的是,我甚至可以在这个桌面上启动“cmd.exe”。这是否意味着从服务创建的新流程可以是交互式的 还是因为psexec有某种黑魔法?如果是,它是如何做到的 我试图在Vi

从微软网站(见)上可以清楚地看到“在WindowsVista中,服务无法直接与用户交互”

因此,我决定使用“psexec-scmd.exe”来测试这一点。据我所知,“psexec”创建一个服务以打开命令提示符。不用说它起作用了。然后我决定将“EnumWinSta GUI”与psexec结合使用,切换到winlogon桌面。令我惊讶的是,我甚至可以在这个桌面上启动“cmd.exe”。这是否意味着从服务创建的新流程可以是交互式的

还是因为psexec有某种黑魔法?如果是,它是如何做到的


我试图在Vista和XP中显示一个从服务到winlogon桌面对象的全屏窗口

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

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

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


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

为什么要用全屏窗口覆盖winlogon桌面?这听起来像是恶意软件试图欺骗登录用户界面。它用于紧急通知,如大楼发生火灾……如何获取交互式会话的用户令牌?