Как получить доменное имя Windows?

Как я могу получить доменное имя машины (если машина действительно присоединена к домену? )?

И, конечно же, если машина не присоединена к домену, функция должна возвращать

  • null, или
  • пустую строку, или
  • имя машины, или
  • ] "."

Примечания:

  • функцияNetGetJoinInformationWin32 возвращает устаревшее имя NetBIOS домена (например, AVATOPIA), а не имя домена (например, avatopia.local)

  • переменная среды USERDOMAINвозвращает домен вошедшего в систему пользователя, который может отличаться от машины; а также возвращает унаследованное NetBIOS-имя домена (например, AVATOPIA)

  • переменная среды USERDNSDOMAINвозвращает доменное имя вошедшего в систему пользователя, которое может отличаться от машины

У Microsoft есть статья в базе знаний Как получить текущие имена пользователей и доменов в Windows NT, Windows 2000 или Windows XP, которая основана на получении токена безопасности пользователя и вызове LookupAccountSid.

  • Win32-функция LookupAccountSid возвращает устаревшее NetBIOS-имя домена (например,АВАТОПИЯ); а также возвращает домен вошедшего в систему пользователя, который может отличаться от машины.

Первое обновление

. Я также пытался использовать объект AD для привязки к интерфейсу IADs домена:

IADs domain;
ADsGetObject("LDAP://rootDES", IDs, out domain);

Проблема с этим подходом заключается в том, что:

  • вы не можете получить доменное имя (только отличительное имя)
  • это не работает, если у пользователя нет разрешений на запрос AD
  • это не работает, если пользователь не является допустимым пользователем в активном каталоге
  • это работает только для доменов Active Directory

Второе обновление :

Просто чтобы было ясно, что я хочу:

enter image description here

Дополнительное чтение

14
задан Community 23 May 2017 в 11:53
поделиться