试图将Windows 10上的登录用户(以及Windows 2012 R2上的所有登录用户)的UPN(UserPrincipalName)系统加入Azure AD。
在基于Win32本机服务的应用程序中使用TranslateNameW API(https://docs.microsoft.com/en-us/windows/desktop/api/secext/nf-secext-translatenamew)来获取登录用户的UPN。在加入本地AD的系统上运行正常。
wchar_t user_sam[512] = { 0 };
wchar_t user_upn[1024] = { 0 };
DWORD len = sizeof(user_upn);
swprintf_s(user_sam, L"%ws\\%ws", L"AAD", L"naga");
BOOL got_upn = TranslateNameW(user_sam, NameSamCompatible, NameUserPrincipal, user_upn, &len);
if (! got_upn)
wprintf(L"Failed to get user upn for %ws: %ld", user_sam, GetLastError());
此API在加入Azure AD的系统上失败,并显示错误消息“指定的域不存在或无法联系。”
答案 0 :(得分:0)
我知道问这个问题已经有一段时间了,但是也许仍然有人可以从答案中受益。
您可以将GetUserNameEx与NameUserPrincipal一起使用。这是一个工作示例:
wchar_t user_upn[1024] = { 0 };
DWORD len = sizeof(user_upn);
if (GetUserNameExW(NameUserPrincipal, user_upn, &len))
{
std::wcout << "Username=" << user_upn << std::endl;
}
实际上,当您将“ / UPN”用作参数时,此功能是whoami命令执行的功能。