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

hes*_*ini 4 c++ windows winapi active-directory

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

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

GetComputerNameEx( ComputerNameDnsDomain, domainNameBuf, &bufSize );    
Run Code Online (Sandbox Code Playgroud)

或者

GetUserName(sBuffer.GetBuffer(dwUsernameSize), &dwUsernameSize);
Run Code Online (Sandbox Code Playgroud)

或者

LookupAccountName(NULL, 
                  sUsername,
                  (PSID)pSid,
                  &dwSidSize,
                  sBuffer.GetBuffer(dwDomainNameSize), 
                  &dwDomainNameSize,
                  (PSID_NAME_USE)&sidType);
Run Code Online (Sandbox Code Playgroud)

或者

nStatus = NetWkstaUserGetInfo(NULL,dwLevel,(LPBYTE *)&pBuf);
Run Code Online (Sandbox Code Playgroud)

Har*_*ton 6

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

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

使用 比较主域的 SID 与用户的域 SID EqualSid。如果SID相等,则用户登录到域帐户;否则,用户将登录到本地帐户。