gpt4 book ai didi

C++ - 进程以管理员身份运行时的 GetUserName()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:00 29 4
gpt4 key购买 nike

我有一个提示用户名的简单C++程序

#include <windows.h>
#include <Lmcons.h>
#include <winbase.h>

int _tmain(int argc, _TCHAR* argv[])
{
wchar_t username[UNLEN + 1];
DWORD username_len = UNLEN + 1;
::GetUserName(username, &username_len);

MessageBox(NULL, username, NULL, 1);
return 1;
}

GetUserName()在管理员帐户中按预期执行,这意味着打印真实的用户名。

但是,当在非管理员帐户 中以管理员身份运行时,我得到的是管理员名称,而不是实际登录的用户。

我相信这种行为是预料之中的,因为它记录在 GetUserName() 中:
如果当前线程正在模拟另一个客户端,则 GetUserName 函数返回线程正在模拟的客户端的用户名。

问题

有没有办法获得真正的登录用户(非管理员用户),即使进程以管理员身份运行?

最佳答案

我相信您想问 Windows 的问题是“哪个用户登录到当前 session ”。

为此,请调用 ProcessIdToSessionId()使用您自己的进程 ID 来确定当前 session ID。

然后调用WTSQuerySessionInformation()使用 WTSUserName 选项获取用户名。

关于C++ - 进程以管理员身份运行时的 GetUserName(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672303/

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