是否可以看到系统的用户桌面?如何从另一个会话到您的用户的桌面?
我运行 Windows 7。 我运行 Windows 服务,该服务运行带有 GUI 的程序。 我看不到程序的 GUI,因为它是由系统甚至我的用户从另一个会话启动的。
有没有办法让我看到我的程序? 将桌面切换到系统用户?
I run Windows 7.
I run windows service that runs a program with GUI.
I cannot see the GUI of my program because it was started from another session by system or even my user.
Is there a way for me to see my program?
Switch desktop to system user?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
SetThreadDesktop()
将服务中的线程上下文更改为用户桌面。SetThreadDesktop()
将桌面句柄作为第一个参数;要获取该句柄,请使用EnumDesktops()< /代码>
。
EnumDesktops()
将窗口站的句柄作为第一个参数;要获取该句柄,请使用EnumWindowStations( )
要了解 Window Station 和桌面的情况,请尝试阅读 此概述来自 MSDN。
使用这种技术要小心。与用户桌面交互的较高权限进程(即服务)是粉碎攻击的基础。您需要编写一个单独的应用程序,该应用程序在用户上下文中运行并通过管道或类似方式与您的服务进行通信。
Use
SetThreadDesktop()
to change the thread's context in your service to the user's desktop.SetThreadDesktop()
takes a handle to the desktop as it's first parameter; to get that handle, useEnumDesktops()
.EnumDesktops()
takes a handle to the window station as it's first parameter; to get that handle, useEnumWindowStations()
To understand what's going on with Window Stations and Desktops, try reading this overview from from MSDN.
Be cautious with this technique. Higher-privileged processes (i.e., services) interacting with the user's desktop are the basis for shatter attacks. You need to write a separate application that runs in the user's context and communicates with your service via pipes or similar.