Получите локальное имя для входа для данной учетной записи Microsoft, возвращенной NetWkstaUserEnum API в Windows 8 и выше.

Я использую NetWkstaUserEnum() чтобы получить имя локального пользователя и информацию о его домене.

До Windows 7 он возвращал только логин и работал нормально. Начиная с Windows 8 была добавлена ​​учетная запись Microsoft, и для этого типа учетной записи API начал возвращать имя учетной записи Microsoft вместо локального имени для входа.

Например вернул username@outlook.com вместо usern_0000 который является фактическим локальным логином Windows.

Я не могу использовать NetUserEnum() так как не возвращает доменное имя пользователя.

Поэтому мне нужно получить локальное имя пользователя для данной учетной записи Microsoft, возвращенной NetWkstaUserEnum() API.

Любая помощь будет оценена.

1 ответ

Решение

Наконец, я смог найти способ получить имя пользователя Windows для данной учетной записи Microsoft. Он использует 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 ) ;
Другие вопросы по тегам