[英]How to reliably get LOGON USER name/sid from a process running as SYSTEM?
我有一个以 SYSTEM 身份运行(在交互式桌面上)的应用程序。 该应用程序需要以当前登录的用户身份启动浏览器或 email 客户端。
本来以为只需要go看桌面,windows站,session,就可以判断自己是在哪个用户的登录桌面上运行的。但是,从桌面,windows站,session获取用户信息的时候,好像都是成为特殊帐户(例如“LogonSessionId_0_4005652”)。
一种看起来很有希望的方法是调用WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, ...)
。 这产生了登录用户的名称,我可以调用LookupAccountNameW()
来获取 SID。
微软关于 WTSQuerySessionInformationW 的文档中的这一点让我有点不舒服……
在指定的远程桌面 Session 主机 (RD Session 主机) 服务器上检索指定 session 的 session 信息。 (强调我的)
...并且...
如果远程桌面服务未运行,则对 WTSQuerySessionInformation 的调用将失败。
我似乎记得家庭版以前的 Windows 版本不支持远程桌面。 我们的应用程序针对 Windows 10 和 11。我可以确定WTSQuerySessionInformationW
调用对所有用户都有效吗?
你自己的ProcessIdToSessionId
然后WTSQueryUserToken
应该给你一个可以与CreateProcessAsUser
一起使用的令牌。
另一种方法是使用FindWindow
查找任务栏并复制 Explorer.exes 标记。 如果资源管理器未运行,这将不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.