2016-07-13 1 views
0

Я столкнулся с очевидной простой проблемой, но это вызывает некоторые проблемы.Получение полного доменного имени для текущего пользователя в C#

Давайте предположим, что у меня есть два доверенных доменов AD: DEMO.intern и DEMO.trust

Мне нужно, чтобы получить полное доменное имя для текущего пользователя в мое приложение, которое использует Windows, Авт. Пользователи из обоих доменов могут использовать его. Мне нужно знать, какой пользователь из какого домена.

Очевидно,

Environment.UserDomainName 

или

System.Security.Principal.WindowsIdentity.GetCurrent().Name 

терпит неудачу возвращения DEMO в обоих случаях.

Я знаю, что:

System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName 

дает мне полное доменное имя для локального компьютера, но как это может быть достигнуто за текущий зарегистрированный пользователь?

Я также попытался:

var host = Dns.GetHostEntry(Environment.UserDomainName); 
host.HostName.Dump(); 

без успеха дает мне ошибку «Нет такого хоста не известно». Итак, как я могу получить полное доменное имя для зарегистрированного пользователя, например DEMO.intern не только DEMO?

ответ

1

После некоторых исследований, это получает работу:

public static class GetUserNameExUtil 
{ 
    #region Interop Definitions 
    public enum EXTENDED_NAME_FORMAT 
    { 
     NameUnknown = 0, 
     NameFullyQualifiedDN = 1, 
     NameSamCompatible = 2, 
     NameDisplay = 3, 
     NameUniqueId = 6, 
     NameCanonical = 7, 
     NameUserPrincipal = 8, 
     NameCanonicalEx = 9, 
     NameServicePrincipal = 10, 
     NameDnsDomain = 12, 
    } 
    [System.Runtime.InteropServices.DllImport("secur32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)] 
    public static extern int GetUserNameEx(int nameFormat, StringBuilder userName, ref int userNameSize); 
    #endregion 

    public static string GetUserName(EXTENDED_NAME_FORMAT nameFormat) 
    { 
     if (Environment.OSVersion.Platform != PlatformID.Win32NT) 
     { 
      return null; 
     } 

     StringBuilder userName = new StringBuilder(1024); 
     int userNameSize = userName.Capacity; 
     if (GetUserNameEx((int)nameFormat, userName, ref userNameSize) != 0) 
     { 
      string[] nameParts = userName.ToString().Split('\\'); 
      return nameParts[0]; 
     } 

     return null; 
    } 
    public static string GetUserFullName() 
    { 
     return GetUserName(EXTENDED_NAME_FORMAT.NameDnsDomain); 
    } 
} 
+0

это не работает нормально. как мне нужно от имени пользователя log logon iis, но я не получаю, и у вас есть предложение ??? @ m3s5 –