How to get domain alias using System.DirectoryServices.ActiveDirectory.Domain class

active-directory, alias, c#, domain-name

Solution

private string GetNetbiosDomainName(string dnsDomainName)
    {
        string netbiosDomainName = string.Empty;

        DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");

        string configurationNamingContext = rootDSE.Properties["configurationNamingContext"][0].ToString();

        DirectoryEntry searchRoot = new DirectoryEntry("LDAP://cn=Partitions," + configurationNamingContext);

        DirectorySearcher searcher = new DirectorySearcher(searchRoot);
        searcher.SearchScope = SearchScope.OneLevel;
        searcher.PropertiesToLoad.Add("netbiosname");
        searcher.Filter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", dnsDomainName);

        SearchResult result = searcher.FindOne();

        if (result != null)
        {
            netbiosDomainName = result.Properties["netbiosname"][0].ToString();
        }

        return netbiosDomainName;
    }

Problem

We have a domain with full name, e.g. long-domainname.com; this domain name is replaced with alias short. this alias can be retrieved using `netapi32.dll`, like this: ``` [DllImport("Netapi32.dll")] static extern int NetApiBufferFree(IntPtr Buffer); // Returns the domain name the computer is joined to, or "" if not joined. public static string GetJoinedDomain() { int result = 0; string domain = null; IntPtr pDomain = IntPtr.Zero; NetJoinStatus status = NetJoinStatus.NetSetupUnknownStatus; try { result = NetGetJoinInformation(null, out pDomain, out status); if (result == ErrorSuccess && status == NetJoinStatus.NetSetupDomainName) { domain = Marshal.PtrToStringAuto(pDomain); } } finally { if (pDomain != IntPtr.Zero) NetApiBufferFree(pDomain); } if (domain == null) domain = ""; return domain; } ``` This method return the sort value. But using the `System.DirectoryServices.ActiveDirectory.Domain` class, and its `Name` property, I get long-domainname.com value. Searching the properties under the Debug mode, I couldn't find any short value field or property. Is it possible with `System.DirectoryServices.ActiveDirectory.Domain` class? Or may be it is possible with some other class of `System.DirectoryServices` namespace? How to get the short domain name value without importing external *.dll?

Original source