Как я могу получить доменное имя машины (если машина фактически соединена с доменом)?
И, конечно, если машина не присоединена к домену, функция должна возвращать
-
null
, или - пустая строка или
- имя машины, или
-
"."
Примечания:
-
NetGetJoinInformation
Функция Win32 возвращает устаревшее имя NetBIOS для домена (например,AVATOPIA
), а не имя домена (например,avatopia.local
) -
переменная среды
USERDOMAIN
возвращает домен зарегистрированного пользователя, который может отличаться от машины; а также возвращает устаревшее имя NetBIOS для домена (например,AVATOPIA
) -
переменная среды
USERDNSDOMAIN
возвращает имя домена зарегистрированного пользователя, который может отличаться от машины
Microsoft имеет статью базы знаний Как получить текущие имена пользователей и доменов в Windows NT, Windows 2000 или Windows XP, которые полагаются на получение токена безопасности пользователя и вызов LookupAccountSid.
- Функция LookupAccountSid Win32 возвращает устаревшее имя NetBIOS для домена (например,
AVATOPIA
); а также возвращает домен зарегистрированного пользователя, который может отличаться от машины.
Обновить один
Я также попытался использовать объект ADs для привязки к интерфейсу IADs
домена:
IADs domain;
ADsGetObject("LDAP://rootDES", IDs, out domain);
Проблема с этим подходом заключается в следующем:
- вы не можете получить доменное имя (только различающееся имя)
- он не работает, если у пользователя нет разрешений на запрос AD
- он не работает, если пользователь не является допустимым пользователем в активном каталоге
- он работает только для доменов Active Directory
Обновить два:
Просто, чтобы быть ясным, что я хочу:
- какой переключатель выбран
- что в (выбранном) поле
Чтение бонусов
- Как получить полное доменное имя в окнах в Delphi (домен пользователя)
- Имя машинного домена в .NET? (из .NET)