问题描述
我正在尝试获取当前登录用户的 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