我有一个提示用户名的简单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/