Вот чертовски простой подход, который я не вижу упомянутым.
TCHAR UserDnsDomain[128] = { 0 };
DWORD Result = 0;
Result = GetEnvironmentVariable("USERDNSDOMAIN", UserDnsDomain, sizeof(UserDnsDomain));
if (Result == 0 || Result >= sizeof(UserDnsDomain) || GetLastError() == ERROR_ENVVAR_NOT_FOUND)
{
return(FALSE); // Not logged in to a domain
}
Это основано на идее, что если пользователь, выполняющий этот код, в настоящее время не вошел в домен, то переменная среды USERDNSDOMAIN будет пустой или недоступной. Но есть некоторые предостережения, о которых вы должны подумать.
Плюсы:
- Очень легко реализовать.
- 99% надежности.
Минусы:
- Может давать сбой или возвращать ложные результаты, если компьютер подключен к домену, но пользователь, выполняющий этот код, вошел на этот компьютер с локальной учетной записью.
- Может давать сбой или возвращать ложные результаты, если компьютер подключен к домену, но сетевое подключение к контроллеру домена было недоступно во время входа в систему / пользователь вошел в систему с кэшированными учетными данными.