Search code examples
c#exceptionactive-directoryactive-directory-group

Unexpected exception thrown when looking up user information


I have some code that is looking up group memberships from local groups on a machine. For each member, it tries to load some information about the user (eg. find a group and get the names of each of its members).

The code:

using (DirectoryEntry machine = new DirectoryEntry("WinNT://" + Environment.MachineName + ", Computer"))
{
    using (DirectoryEntry group = machine.Children.Find(groupName, "group"))
    {
        object members = group.Invoke("members", null);

        foreach (object groupMember in (IEnumerable) members)
        {
            using (DirectoryEntry member = new DirectoryEntry(groupMember))
            {
                member.RefreshCache();
                string name = member.Name;
                // <code snipped>
            }
        }
    }
}

The code works fine most of the time, but for some group members, it throws a FileNotFoundException when the RefreshCache() method is thrown:

System.IO.FileNotFoundException: 
    The filename, directory name, or volume label syntax is incorrect.
    (Exception from HRESULT: 0x8007007B)
at System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.GetInfo()
at System.DirectoryServices.DirectoryEntry.RefreshCache()
at GroupLookup.GetLocalGroupMembership(String groupName)

What is causing the FileNotFoundException (and what file is it looking for)?


Solution

  • I didn't get to the bottom of what was causing the FileNotFoundException, although I suspect it was to do with the group set-up - the groups had both local and domain users in them.

    Because I only needed the users' names and SIDs, and these were already present on the DirectoryEntry, I solved this issue by not calling the RefreshCache method. This lets the code execute without an exception.