Unknown error (0x80005000) when trying to set local machine account password

3

I am writing a csharp windows form application which attempts to check for the existence of a local account and if found set the password on it. A couple of key points:

  • I'm doing this for local accounts - NOT Active Directory accounts. The machines are not members of a windows AD domain.

  • I HAVE to use setpassword not changepassword as change password requires you to know the previous password which in some cases I do not. Setpassword is supposed to allow you to select a new password without having to know the old one

  • The application will be run by approximately 50 users using a variety of OS's from Windows XP all the way up to Windows Server 2008 R2. Because I can't predict what operating system and version of .net will be available I have set my target framework as .net 2.0.

  • I am expecting my user to be running as an administrator presently so I don't think permissions are an issue. I can create uses just fine I just can't set password on an existing account.

Here's my code:

    public void VerifiyAccount()
    {
        String username = "specialaccount";
        String password = "SuperSecretPassw0rd!";

        if (CheckIfAccountExists(username))
        {
            MessageBox.Show("User Account all ready exists.");
            SetUserPassword(password);

        }
        else
        {
            MessageBox.Show("User Account does not exist");
            CreateUserAccount(username, password);
        }
    }

    public void SetUserPassword(string newPassword)
    {
        try
        {
            DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://" + Environment.MachineName + ", specialaccount");
            hostMachineDirectory.Invoke("SetPassword", newPassword);
            hostMachineDirectory.CommitChanges();
            hostMachineDirectory.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

Here's the error I am receiving:


Unknown error (0x80005000)

OK

I can't figure out why I'm getting the above error and despite googling and searching stack overflow I can't find any explanation. Most examples I can find revolve around connecting to Active Directory - not local accounts. Or are using newer .net 4.0 features. I have to believe that if I can create an account I should be able to set the password on an account. Any ideas or suggestions on what I might be doing wrong?

Thanks Brad

c#
passwords
.net-2.0
account
asked on Stack Overflow Mar 9, 2012 by Brad • edited Mar 9, 2012 by Akrem

1 Answer

2

I've run in to similarly obfuscated errors when using ActiveDirectory libraries. What I've found to be immensely helpful is using the Microsoft Network Monitor to track messages being sent to/from LDAP. Usually the error message being sent back has much more detail.

EDIT: I would recommend the following to help debug your communication issues:

  • Place a breakpoint and run your app to where you CommitChanges
  • Fire-up the Microsoft Network Monitor (start the capture)
  • Execute the CommitChanges line
  • Stop the current capture in the Microsoft Network Monitor

At this point you can scroll through the messages to see where your calls occurred.

EDIT2: Here's a reference to the DirectoryEntry.Path. It shows the WinNT formatting for connecting to a user as:

WinNT:// < domain name> / < computer name > / < user name >

answered on Stack Overflow Mar 9, 2012 by CAbbott • edited Mar 9, 2012 by CAbbott

User contributions licensed under CC BY-SA 3.0