Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3429882
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 18, 20262026-05-18T07:08:12+00:00 2026-05-18T07:08:12+00:00

I know that this type of question has been asked before, but other methods

  • 0

I know that this type of question has been asked before, but other methods are failing me right now.

As it stands our windows service polls AD, given an LDAP (i.e. LDAP://10.32.16.80) and a list of usergroups within that AD server to search for.
It retrieves all users within those given groups, recursively searching those groups for more groups as well.
Each user is then added to another applications authenticated users list.

This part of the application is running successfully. However, we’re in need of each user’s friendly domain name (i.e. the part of their login DOMAIN/username)

So if there is a user that is part of TEST domain, named Steve: TEST/steve is his login.
I’m able to find steve in the AD, however I also need “TEST” to be stored along with his AD information.

Again, I can find ‘steve’ fine by using a directory searcher and the LDAP IP I’m given, but given the LDAP IP, how can I find the friendly domain name?

When I try the following code I’m given an error when attempting to access the ‘defaultNamingContext’:

System.Runtime.InteropServices.COMException (0x8007202A): The authentication mechanism is unknown.

Here is the code:

    private string SetCurrentDomain(string server)
    {
        string result = string.Empty;
        try
        {
            logger.Debug("'SetCurrentDomain'; Instantiating rootDSE LDAP");
            DirectoryEntry ldapRoot = new DirectoryEntry(server + "/rootDSE", username, password);
            logger.Debug("'SetCurrentDomain'; Successfully instantiated rootDSE LDAP");

            logger.Debug("Attempting to retrieve 'defaultNamingContext'...");
            string domain = (string)ldapRoot.Properties["defaultNamingContext"][0]; //THIS IS WHERE I HIT THE COMEXCEPTION
            logger.Debug("Retrieved 'defaultNamingContext': " + domain);
            if (!domain.IsEmpty())
            {

                logger.Debug("'SetCurrentDomain'; Instantiating partitions/configuration LDAP entry");
                DirectoryEntry parts = new DirectoryEntry(server + "/CN=Partitions,CN=Configuration," + domain, username, password);

                logger.Debug("'SetCurrentDomain'; Successfully instantiated partitions/configuration LDAP entry");
                foreach (DirectoryEntry part in parts.Children)
                {
                    if (part.Properties["nCName"] != null && (string)part.Properties["nCName"][0] != null)
                    {
                        logger.Debug("'SetCurrentDomain'; Found property nCName");
                        if ((string)part.Properties["nCName"][0] == domain)
                        {
                            logger.Debug("'SetCurrentDomain'; nCName matched defaultnamingcontext");
                            result = (string)part.Properties["NetBIOSName"][0];
                            logger.Debug("'SetCurrentDomain'; Found NetBIOSName (friendly domain name): " + result);
                            break;
                        }
                    }
                }
            }
            logger.Debug("finished setting current domain...");
        }
        catch (Exception ex)
        {
            logger.Error("error attempting to set domain:" + ex.ToString());
        }
        return result;
    }

edit

I added this sample method in order to attempt a suggestion but am getting an exception: “Unspecified error” when I hit the “FindAll()” call on the searcher.
The string being passed in is: “CN=TEST USER,CN=Users,DC=tempe,DC=ktregression,DC=com”

        private string GetUserDomain(string dn)
    {
        string domain = string.Empty;
        string firstPart = dn.Substring(dn.IndexOf("DC="));
        string secondPart = "CN=Partitions,CN=Configuration," + firstPart;
        DirectoryEntry root = new DirectoryEntry(secondPart, textBox2.Text, textBox3.Text);
        DirectorySearcher searcher = new DirectorySearcher(root);
        searcher.SearchScope = SearchScope.Subtree;
        searcher.ReferralChasing = ReferralChasingOption.All;
        searcher.Filter = "(&(nCName=" + firstPart + ")(nETBIOSName=*))";
        try
        {
            SearchResultCollection rs = searcher.FindAll();
            if (rs != null)
            {
                domain = GetProperty(rs[0], "nETBIOSName");
            }
        }
        catch (Exception ex)
        {

        }


        return domain;
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-18T07:08:13+00:00Added an answer on May 18, 2026 at 7:08 am

    This article helped me much to understand how to work with the Active Directory.
    Howto: (Almost) Everything In Active Directory via C#

    From this point forward, if you require further assitance, please let me know with proper questions in comment, and I shall answer them for you to the best of my knowledge.

    EDIT #1

    You had better go with this example’s filter instead. I have written some sample code to briefly show how to work with the System.DirectoryServices and System.DirectoryServices.ActiveDirectory namespaces. The System.DirectoryServices.ActiveDirectory namespace is used to retrieve information about the domains within your Forest.

    private IEnumerable<DirectoryEntry> GetDomains() {
        ICollection<string> domains = new List<string>();
    
        // Querying the current Forest for the domains within.
        foreach(Domain d in Forest.GetCurrentForest().Domains)
            domains.Add(d.Name);
    
        return domains;
    }
    
    private string GetDomainFullName(string friendlyName) {
        DirectoryContext context = new DirectoryContext(DirectoryContextType.Domain, friendlyName);
        Domain domain = Domain.GetDomain(context);
        return domain.Name;
    }
    
    private IEnumerable<string> GetUserDomain(string userName) {
        foreach(string d in GetDomains()) 
            // From the domains obtained from the Forest, we search the domain subtree for the given userName.
            using (DirectoryEntry domain = new DirectoryEntry(GetDomainFullName(d))) {
                using (DirectorySearcher searcher = new DirectorySearcher()){
                    searcher.SearchRoot = domain;
                    searcher.SearchScope = SearchScope.Subtree;
                    searcher.PropertiesToLoad.Add("sAMAccountName");
                    // The Filter is very important, so is its query string. The 'objectClass' parameter is mandatory.
                    // Once we specified the 'objectClass', we want to look for the user whose login
                    // login is userName.
                    searcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", userName);
    
                    try {
                        SearchResultCollection  results = searcher.FindAll();
    
                        // If the user cannot be found, then let's check next domain.
                        if (results == null || results.Count = 0)
                            continue;
    
                         // Here, we yield return for we want all of the domain which this userName is authenticated.
                         yield return domain.Path;
                    } finally {
                        searcher.Dispose();
                        domain.Dispose();
                    }
                }
    }
    

    Here, I didn’t test this code and might have some minor issue to fix. This sample is provided as-is for the sake of helping you. I hope this will help.

    EDIT #2

    I found out another way out:

    1. You have first to look whether you can find the user account within your domain;
    2. If found, then get the domain NetBIOS Name; and
    3. concatenate it to a backslash (****) and the found login.

    The example below uses a NUnit TestCase which you can test for yourself and see if it does what you are required to.

    [TestCase("LDAP://fully.qualified.domain.name", "TestUser1")] 
    public void GetNetBiosName(string ldapUrl, string login)
        string netBiosName = null;
        string foundLogin = null;
    
        using (DirectoryEntry root = new DirectoryEntry(ldapUrl))
            Using (DirectorySearcher searcher = new DirectorySearcher(root) {
                searcher.SearchScope = SearchScope.Subtree;
                searcher.PropertiesToLoad.Add("sAMAccountName");
                searcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", login);
    
                SearchResult result = null;
    
                try {
                    result = searcher.FindOne();
    
                    if (result == null) 
                        if (string.Equals(login, result.GetDirectoryEntry().Properties("sAMAccountName").Value)) 
                            foundLogin = result.GetDirectoryEntry().Properties("sAMAccountName").Value
                } finally {
                    searcher.Dispose();
                    root.Dispose();
                    if (result != null) result = null;
                }
            }
    
        if (!string.IsNullOrEmpty(foundLogin)) 
            using (DirectoryEntry root = new DirectoryEntry(ldapUrl.Insert(7, "CN=Partitions,CN=Configuration,DC=").Replace(".", ",DC=")) 
                Using DirectorySearcher searcher = new DirectorySearcher(root)
                    searcher.Filter = "nETBIOSName=*";
                    searcher.PropertiesToLoad.Add("cn");
    
                    SearchResultCollection results = null;
    
                    try {
                        results = searcher.FindAll();
    
                        if (results != null && results.Count > 0 && results[0] != null) {
                            ResultPropertyValueCollection values = results[0].Properties("cn");
                            netBiosName = rpvc[0].ToString();
                    } finally {
                        searcher.Dispose();
                        root.Dispose();
    
                        if (results != null) {
                            results.Dispose();
                            results = null;
                        }
                    }
                }
    
        Assert.AreEqual("FULLY\TESTUSER1", string.Concat(netBiosName, "\", foundLogin).ToUpperInvariant())
    }
    

    The source from which I inspired myself is:
    Find the NetBios Name of a domain in AD

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I know this type of question has been asked before, but I could not
I know that the question has been asked before , but it's been two
I know this question has been asked here before, but I don't think those
I know that this type of question has been asked over and over again,
This is a question that I know has been asked here and several other
I know this question has been asked many times before but I can't find
I know this question has been asked in several variations before, but my question
I know this question has been asked many times before but I tried out
I know this question has been asked before, but I ran into a problem.
Disclaimer: I know this type of question has been asked here before, I just

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.