以管理员身份运行应用程序时,有没有办法获取非管理员用户名
Is there any way to get non-admin user name when running app as admin
我想知道在以管理员身份运行应用程序时是否有任何方法可以获取非管理员用户名。
我尝试使用带有令牌null
的SHGetKnownFolderPath
来获取它,它返回管理员用户名而不是当前登录的非管理员用户。
所以想知道我是否需要使用WTSQueryUserToken
才能获得非管理员用户名。
首先,为什么要使用SHGetKnownFolderPath()
来确定用户名?这不是该 API 的用途。 还有其他 API 更适合获取用户名。
将NULL
令牌句柄传递给SHGetKnownFolderPath()
(或将用户令牌作为输入的任何其他 API(将使用与调用线程关联的用户帐户,在本例中为管理员用户。 对于您所询问的内容,您需要为登录用户传递实际令牌。 或者,在使用NULL
用户令牌调用此类 API 之前模拟登录用户。
WTQueryUserToken()
当然可用于获取用户令牌,但它只能在SYSTEM
帐户下运行的服务中使用。 如果你的应用未作为此类服务运行,则必须创建此类服务,以便应用与之通信。
否则,您只需从其他 API 获取用户名即可。
例如,您可以使用ProcessIdToSessionId()
获取运行应用程序的会话的 ID(请参阅获取当前进程的会话 ID(,然后可以使用WTSQuerySessionInformation(WTSUserName)
获取该会话的登录用户名。
或者,可以枚举所有正在运行的进程,查找在与应用相同的会话 ID 中运行的进程,直到找到explorer.exe
进程,然后可以使用OpenProcess()
和OpenProcessHandle()
获取该进程的用户访问令牌,然后使用GetTokenInformation()
(TokenUser
或TokenOwner
(获取该令牌的 SID, 最后使用LookupAccountSid()
获取该 SID 的用户名。
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 以管理员身份运行应用程序时,有没有办法获取非管理员用户名
- 如何从非管理员用户获取当前登录的用户名、域名和用户 sid
- C ++以管理员身份创建进程并获取其输出
- 获取非管理员用户的设备句柄