为登录的Windows Active Directory用户获取LogonDomain

问题描述

我正在尝试获取当前登录用户 logonDomain 名称。我需要此信息才能确定用户是否使用MicrosoftAccount,AzureAD或标准Windows Active Directory域登录

使用Sysinternals BGInfo.exe实用程序显示logonDomain时,在Windows活动目录中,我会得到域的名称,当运行使用Microsoft帐户登录用户时,它将返回“ MicrosoftAccount”。这就是我的期望。

为此,我尝试将WTSQuerySessioninformation与“ WTSConfigInfo”一起用于WTS_INFO_CLASS参数,如下所述

DWORD dwSessionID;
LPSTR ppBuffer = NULL;
DWORD dwBytesReturned = 0;
WTSCONfigINFO* pInfo = NULL;
WTS_INFO_CLASS wtsci = WTSConfigInfo;

if (!ProcessIdToSessionId(GetCurrentProcessId(),&dwSessionID))
{
    return;
}


if (WTSQuerySessioninformation(WTS_CURRENT_SERVER_HANDLE,dwSessionID,wtsci,&ppBuffer,&dwBytesReturned))
{
    OutputDebugStringX("   dwBytesReturned = %i  sizeof(WTS_INFO_CLASS) = %i  SessionId = %i",dwBytesReturned,sizeof(WTSCONfigINFO),dwSessionID);

    if (dwBytesReturned > 0)
    {
        pInfo = (WTSCONfigINFO*)ppBuffer;
        OutputDebugStringX("logonUserName = %s",pInfo->logonUserName);
        OutputDebugStringX("logonDomain = %s",pInfo->logonDomain);
    }
}

WTSFreeMemory(ppBuffer);

代码执行成功,返回了848个字节。问题在于,除了pInfo-> Version参数返回“ 1”之外,其他所有内容均为空白。

任何人都知道为什么它不返回任何信息,或者是否还有其他方法可以确定谁验证了登录用户

解决方法

最简单的方法是从注册表中读取此值:“ HKEY_CURRENT_USER \ Volatile Environment”值REG_SZ“ LOGONSERVER”或 值REG_SZ“ DCName”的“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \组策略\ DataStore \ Machine \ 0” 或使用WMI类Win32_ComputerSystem