Windows系统已加入Azure AD

时间:2019-03-30 02:28:46

标签: azure winapi visual-c++ azure-active-directory

试图将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的系统上失败,并显示错误消息“指定的域不存在或无法联系。”

1 个答案:

答案 0 :(得分:0)

我知道问这个问题已经有一段时间了,但是也许仍然有人可以从答案中受益。

您可以将GetUserNameExNameUserPrincipal一起使用。这是一个工作示例:

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命令执行的功能。