gpt4 book ai didi

c++ - 以管理员身份运行应用程序时,有什么方法可以获取非管理员用户名

转载 作者:行者123 更新时间:2023-12-02 10:23:05 29 4
gpt4 key购买 nike

我想知道以管理员身份运行应用程序时是否有任何方法可以获取非管理员用户名。

我尝试使用SHGetKnownFolderPathnull作为 token 来获取它,并且它返回的管理员用户名不是当前登录的非管理员用户。

所以想知道我是否需要使用WTSQueryUserToken来获取非管理员用户名。

最佳答案

首先,为什么要使用SHGetKnownFolderPath()来确定用户名?那不是该API的目的。还有其他更适合获取用户名的API。

NULL token 句柄传递给SHGetKnownFolderPath()(或将用户 token 作为输入的任何其他API)将使用与调用线程关联的用户帐户,在这种情况下,该用户帐户是admin用户。对于您的要求,您需要为登录用户传递一个实际的 token 。否则,在使用NULL用户 token 调用此类API之前,请假冒已登录的用户。

WTQueryUserToken() 当然可以用于获取用户 token ,但是只能在SYSTEM帐户下运行的服务内部使用。如果您的应用程序未作为此类服务运行,则必须创建此类服务才能与您的应用程序进行通信。

否则,您只需要从另一个API获取用户名即可。

例如,您可以使用 ProcessIdToSessionId() 获取应用程序正在其中运行的 session 的ID(请参阅Getting the Session ID of the Current Process),然后可以使用 WTSQuerySessionInformation(WTSUserName) 获取该 session 的登录用户名。

或者,您可以enumerate all running processes,查找与您的应用程序在同一 session ID中运行的进程,直到找到explorer.exe进程,然后可以使用 OpenProcess() OpenProcessHandle() 获取该进程的用户访问 token ,然后使用 GetTokenInformation() (TokenUserTokenOwner)获取该 token 的SID,然后最终使用 LookupAccountSid() 获取该SID的用户名。

关于c++ - 以管理员身份运行应用程序时,有什么方法可以获取非管理员用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59218543/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com