繁体   English   中英

如何从以 SYSTEM 身份运行的进程中可靠地获取登录用户名/sid?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM