首页 > 解决方案 > Win API GetUserName 返回 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;
}

标签: c++winapiservice

解决方案


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


推荐阅读