0

NetWkstaUserEnum()用来获取本地用户名及其域详细信息。

在 Windows 7 之前,它曾经只返回登录名并且工作正常。从 Windows 8 开始,添加了 Microsoft 帐户,对于这种类型的帐户,API 开始返回 Microsoft 帐户名称,而不是本地登录名。

例如,它返回username@outlook.com而不是usern_0000实际的 Windows 本地登录名。

我不能使用NetUserEnum(),因为它不返回用户的域名。

因此,我需要获取NetWkstaUserEnum()API 返回的给定 Microsoft 帐户的本地登录名。

任何帮助将不胜感激。

4

1 回答 1

0

最后,我能够找到一种方法来获取给定 Microsoft 帐户的 Windows 用户名。它NetUserGetInfo()用于获取给定用户名的 Microsoft 帐户名称。

代码片段:

do
{
    ntStatus    =   NetUserEnum(szSvr, 0, 0, (LPBYTE*)&userInfo0, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
    if( (ntStatus == NERR_Success) || (ntStatus == ERROR_MORE_DATA) )
    {
        tmpinfo = userInfo0;
        for( i = 0; (i < dwEntriesRead); i++ )
        {
            if(tmpinfo  != NULL)
            {
                ntStatus    =   NetUserGetInfo(szSvr, tmpinfo->usri0_name, 24,(LPBYTE*)&userInfo24);
                if(ntStatus == NERR_Success)
                {
                    CString internetPrincipalName = (LPCWSTR) userInfo24->usri24_internet_principal_name;
                    if(LoginUsrStr.CompareNoCase(internetPrincipalName) == 0)
                    {
                        OutputDebugString("@@@@@@ Account Found @@@@@@");
                        localAccount = (LPCWSTR) tmpinfo->usri0_name;
                        userFound = TRUE;
                        break;
                    }
                }
            }
            tmpinfo++;
        }
    }

    if( userInfo0 != NULL )
    {
        NetApiBufferFree( userInfo0 ) ;
        userInfo0 = NULL ;
    }
    if( userInfo24 != NULL )
    {
        NetApiBufferFree( userInfo24 ) ;
        userInfo24 = NULL ;
    }

} while( userFound == FALSE && ntStatus == ERROR_MORE_DATA ) ;
于 2015-12-21T08:37:29.300 回答