ida*_*hmu 4 c++ windows-xp username windows-vista windows-7
我有一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)
GetUserName()在管理员帐户中按预期执行,这意味着打印真实用户名.
但是,在非管理员帐户中以管理员身份运行时,我会获得管理员名称,而不是真实登录用户.
我相信这种行为是预期的,因为它记录在GetUserName()中:
如果当前线程模拟另一个客户端,则GetUserName函数返回该线程模拟的客户端的用户名.
有没有办法获得真正登录的用户(非管理员用户),即使进程以管理员身份运行?
我相信你想问Windows的问题是"哪个用户登录到当前会话".
为此,请使用您自己的进程ID 调用ProcessIdToSessionId()以确定当前的会话ID.
然后使用获取用户名的选项调用WTSQuerySessionInformation()WTSUserName.