如何验证登录到域或本地的用户

How to verify user logged in to domain or locally

本文关键字:用户 登录 何验证 验证      更新时间:2023-10-16

当我的软件运行时,我的软件大多数是windows用户的登录类型。通过域或本地登录。我需要在windows中获得用户的登录类型。

我认为这些api可以帮助我:

GetComputerNameEx( ComputerNameDnsDomain, domainNameBuf, &bufSize );    

GetUserName(sBuffer.GetBuffer(dwUsernameSize), &dwUsernameSize);

LookupAccountName(NULL, 
                  sUsername,
                  (PSID)pSid,
                  &dwSidSize,
                  sBuffer.GetBuffer(dwDomainNameSize), 
                  &dwDomainNameSize,
                  (PSID_NAME_USE)&sidType);

nStatus = NetWkstaUserGetInfo(NULL,dwLevel,(LPBYTE *)&pBuf);

使用LsaQueryInformationPolicyPolicyDnsDomainInformation检索计算机主域的SID。如果Sid成员是NULL,计算机没有加入域,您可以假设用户登录到本地帐户。

否则,使用GetTokenInformationTokenUser检索当前用户的SID,然后使用GetWindowsAccountDomainSid提取用户SID的域部分。

使用EqualSid比较主域的SID和用户域的SID。如果sid相等,则用户登录到域帐户;

尝试使用GetUserNameEx(NameUserPrincipal,…)获取登录用户的UPN。

您可以用一种简单的方式做到这一点,为什么不直接使用GetEnvironmentVariable来检索USERDOMAIN,然后与COMPUTERNAME进行比较呢?如果它们相同,则用户在本地登录,否则,用户使用域登录。

您还获得了命令行WHOAMI.EXE,它为您提供了信息,我使用的命令行是检索WMI对象win32_computersystem