Если вы используете .Net 3.0 или выше, есть прекрасная библиотека, которая делает это практически пишущим. System.DirectoryServices.AccountManagement
имеет UserPrincipal
объект, который получает именно то, что вы ищете, и вам не нужно связываться с LDAP или переходить к системным вызовам, чтобы сделать это. Вот все, что нужно:
Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal principal = (WindowsPrincipal)Thread.CurrentPrincipal;
// or, if you're in Asp.Net with windows authentication you can use:
// WindowsPrincipal principal = (WindowsPrincipal)User;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
UserPrincipal up = UserPrincipal.FindByIdentity(pc, principal.Identity.Name);
return up.DisplayName;
// or return up.GivenName + " " + up.Surname;
}
Примечание: на самом деле вам не нужен принципал, если у вас уже есть имя пользователя, но если вы работаете в контексте пользователя, его так же легко извлечь из него.