// Clase para listar los usarios public void EnumerateUsers() { int EntriesRead; int TotalEntries; int Resume; listBox2.Items.Clear(); IntPtr bufPtr; GettingAllUsers.NetworkAPI.NetUserEnum(null, 0, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume); if (EntriesRead > 0) { NetworkAPI.USER_INFO_0[] Users = new NetworkAPI.USER_INFO_0[EntriesRead]; IntPtr iter = bufPtr; for (int i = 0; i < EntriesRead; i++) { Users[i] = (NetworkAPI.USER_INFO_0)Marshal.PtrToStructure(iter, typeof(NetworkAPI.USER_INFO_0)); iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(NetworkAPI.USER_INFO_0))); listBox2.Items.Add(Users[i].Username); } NetworkAPI.NetApiBufferFree(bufPtr); } listBox2.SelectedIndex = 0; }
public static string[] GetLocalGroupMembers() { // returns the "DOMAIN\user" members for a specified local group name // adapted from boboes' code at https://stackoverflow.com/questions/33935825/pinvoke-netlocalgroupgetmembers-runs-into-fatalexecutionengineerror/33939889#33939889 string computerName = null; // null for the local machine string groupName = "Administrators"; int EntriesRead; int TotalEntries; IntPtr Resume; IntPtr bufPtr; uint retVal = NetworkAPI.NetLocalGroupGetMembers(computerName, groupName, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume); if (retVal != 0) { if (retVal == NetworkAPI.ERROR_ACCESS_DENIED) { Console.WriteLine("Access denied"); return(null); } if (retVal == NetworkAPI.ERROR_MORE_DATA) { Console.WriteLine("ERROR_MORE_DATA"); return(null); } if (retVal == NetworkAPI.ERROR_NO_SUCH_ALIAS) { Console.WriteLine("Group not found"); return(null); } if (retVal == NetworkAPI.NERR_InvalidComputer) { Console.WriteLine("Invalid computer name"); return(null); } if (retVal == NetworkAPI.NERR_GroupNotFound) { Console.WriteLine("Group not found"); return(null); } if (retVal == NetworkAPI.SERVER_UNAVAILABLE) { Console.WriteLine("Server unavailable"); return(null); } Console.WriteLine("Unexpected NET_API_STATUS: " + retVal.ToString()); return(null); } if (EntriesRead > 0) { string[] names = new string[EntriesRead]; NetworkAPI.LOCALGROUP_MEMBERS_INFO_2[] Members = new NetworkAPI.LOCALGROUP_MEMBERS_INFO_2[EntriesRead]; IntPtr iter = bufPtr; for (int i = 0; i < EntriesRead; i++) { Members[i] = (NetworkAPI.LOCALGROUP_MEMBERS_INFO_2)Marshal.PtrToStructure(iter, typeof(NetworkAPI.LOCALGROUP_MEMBERS_INFO_2)); //x64 safe iter = new IntPtr(iter.ToInt64() + Marshal.SizeOf(typeof(NetworkAPI.LOCALGROUP_MEMBERS_INFO_2))); names[i] = Members[i].lgrmi2_domainandname; } NetworkAPI.NetApiBufferFree(bufPtr); return(names); } else { return(null); } }