我运行Windows 7。 我运行使用GUI运行程序的Windows服务。 我无法看到我的程序的GUI,因为它是由系统甚至我的用户从另一个会话启动的。
有没有办法让我看到我的节目? 将桌面切换到系统用户?
答案 0 :(得分:3)
使用SetThreadDesktop()
将服务中的线程上下文更改为用户的桌面。
SetThreadDesktop()
获取桌面的句柄,因为它是第一个参数;要获得该句柄,请使用EnumDesktops()
。 EnumDesktops()
获取窗口站的句柄,因为它是第一个参数;要获得该处理,请使用EnumWindowStations()
要了解Window Station和Desktops的用途,请尝试从MSDN阅读this overview。
对这种技术要谨慎。与用户桌面交互的高权限进程(即服务)是shatter attacks的基础。您需要编写一个在用户上下文中运行的单独应用程序,并通过管道或类似方式与您的服务进行通信。