Win API GetUserName returns SYSTEM



我有这个方法来获取当前登录用户的用户名,当我将应用程序作为控制台应用程序运行时,它运行良好,但当我将其作为windows服务运行时,会给我SYSTEM作为用户名!有什么想法可以实现我想要的行为,即使我把应用程序作为windows服务运行?

bool GetCurrentUserName(std::wstring& userName)
{
const int INFO_BUFFER_SIZE = 32767;
TCHAR infoBuf[INFO_BUFFER_SIZE] = L"";
DWORD bufCharCount = INFO_BUFFER_SIZE;
if (GetUserName(infoBuf, &bufCharCount))
{
userName = std::wstring(infoBuf);
return true;
}
return false;
}

由于可能有0、1或更多用户登录,因此需要LsaEnumerateLogonSessions。对于每个用户,调用LsaGetLogonSessionData以获取用户名。

MSDN文档说"检索与当前线程关联的用户的名称。"GetUserName只能获取当前线程的用户。该服务的用户是"SYSTEM"。

最新更新