예제 #1
0
        // 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;
        }
예제 #2
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);
            }
        }