Получите локальное имя для входа для данной учетной записи 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 ) ;