gpt4 book ai didi

c++ - 如何使用 C++ 在 SYSTEM 进程中获取事件用户名?

转载 作者:可可西里 更新时间:2023-11-01 09:43:18 25 4
gpt4 key购买 nike

我使用了 GetUserName() 方法,但它返回的用户名在 SYSTEM 进程中是“SYSTEM”。如何在 SYSTEM 进程中获取事件用户名?这是我的代码:

void getComputerUsername(char * username,char * domainname)
{
HANDLE hp , htoken;
char buff[1024];
unsigned long size = 1024;

TOKEN_USER *tuser;
PSID sid;
TCHAR * user = new TCHAR[256];
TCHAR * domain=new TCHAR[256];
SID_NAME_USE snu;

hp = htoken = INVALID_HANDLE_VALUE;
hp = GetCurrentProcess();
if(OpenProcessToken(hp, TOKEN_QUERY, &htoken))
{
if(GetTokenInformation(htoken, TokenUser, (void*)buff, size, &size))
{
tuser = (TOKEN_USER*)buff;
sid = tuser->User.Sid;
size = 256;
if(LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
int iLength = WideCharToMultiByte(CP_ACP, 0, user, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, user, -1, username, iLength, NULL, NULL);

iLength = WideCharToMultiByte(CP_ACP, 0, domain, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, domain, -1, domainname, iLength, NULL, NULL);
//strcpy( user,username);
}
}
}

最佳答案

如果你想知道谁登录了物理控制台,你可以调用WTSGetActiveConsoleSessionId获取当前事件的终端服务(又名“快速用户切换”又名“远程桌面”) session ID。

然后您可以调用 WTSQuerySessionInformation使用 WTSUserName 获取用户名。

(如果您感兴趣的用户可能是通过远程桌面登录的,则此方法将不起作用。)

关于c++ - 如何使用 C++ 在 SYSTEM 进程中获取事件用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18997558/

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