Exemplo n.º 1
0
        //枚举全部本地用户组信息
        public static string LocalGroupEnum()
        {
            string tempStr = "";
            int    entriesread;
            int    totalentries;
            int    resume_handle;
            IntPtr bufPtr;

            NetLocalGroupEnum(null, 1, out bufPtr, -1, out entriesread, out totalentries, out resume_handle);

            if (entriesread > 0)
            {
                LOCALGROUP_INFO_1[] GroupInfo = new LOCALGROUP_INFO_1[entriesread];
                IntPtr iter = bufPtr;
                tempStr  = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
                tempStr += "<INFO>\r\n";
                for (int i = 0; i < entriesread; i++)
                {
                    GroupInfo[i] = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_INFO_1));
                    iter         = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_INFO_1)));
                    tempStr     += "<ITEM value=\"" + GroupInfo[i].LocalGroup_Comment_1 + "\">" + GroupInfo[i].LocalGroup_Name_1 + "</ITEM>\r\n";
                }
                tempStr += "</INFO>";
            }
            return(tempStr);
        }
Exemplo n.º 2
0
        public static IEnumerable <DomainGroup> EnumLocalGroups(bool sid = false)
        {
            int    read;
            int    total;
            int    resume;
            IntPtr buf;

            int ret = netapi.NetLocalGroupEnum(null, 1, out buf, util.MAX_PREFERRED_LENGTH, out read, out total, out resume);

            if (ret != 0)
            {
                throw new Win32Exception(ret);
            }
            if (read > 0)
            {
                DomainGroup group = new DomainGroup();
                var         g     = new LOCALGROUP_INFO_1();
                IntPtr      pItem = buf;
                for (int i = 0; i < read; i++)
                {
                    Marshal.PtrToStructure(pItem, g);
                    pItem = new IntPtr(pItem.ToInt64() + Marshal.SizeOf(typeof(LOCALGROUP_INFO_1)));

                    if (sid)
                    {
                        group.SID = GetAccountSID(g.name);
                    }
                    group.Name    = g.name;
                    group.Comment = g.comment;
                    yield return(group);
                }
                netapi.NetApiBufferFree(buf);
            }
        }
Exemplo n.º 3
0
        public static IEnumerable <LOCALGROUP_INFO_1> GetLocalGroups(string?computerName)
        {
            // Returns local groups (and comments)
            var retVal = NetLocalGroupEnum(computerName, 1, out var bufPtr, -1, out var entriesRead, out var totalEntries, out var resumeHandle);

            if (retVal != 0)
            {
                var errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
                throw new Exception("Error code " + retVal + ": " + errorMessage);
            }

            var groups = new List <LOCALGROUP_INFO_1>();

            if (entriesRead == 0)
            {
                return(groups);
            }

            var names     = new string[entriesRead];
            var groupInfo = new LOCALGROUP_INFO_1[entriesRead];
            var iter      = bufPtr;


            for (var i = 0; i < entriesRead; i++)
            {
                groupInfo[i] = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_INFO_1));
                groups.Add(groupInfo[i]);

                //x64 safe
                iter = new IntPtr(iter.ToInt64() + Marshal.SizeOf(typeof(LOCALGROUP_INFO_1)));
            }
            NetApiBufferFree(bufPtr);

            return(groups);
        }
Exemplo n.º 4
0
        //修改本地用户组信息
        public static bool LocalGroupSetInfo(string GroupName, string GroupDescription)
        {
            LOCALGROUP_INFO_1 GroupInfo = new LOCALGROUP_INFO_1();

            GroupInfo.LocalGroup_Name_1    = GroupName.ToString();
            GroupInfo.LocalGroup_Comment_1 = GroupDescription.ToString();
            if (NetLocalGroupSetInfo(null, GroupName.ToString(), 1, ref GroupInfo, 0) != 0)
            {
                throw (new Exception("修改用户组信息时出现错误"));
            }
            else
            {
                return(true);
            }
        }
Exemplo n.º 5
0
        //添加本地用户组
        public static bool LocalGroupAdd(string GroupName, string GroupDescription)
        {
            LOCALGROUP_INFO_1 NewLocalGroup = new LOCALGROUP_INFO_1();

            NewLocalGroup.LocalGroup_Name_1 = GroupName.ToString();

            NewLocalGroup.LocalGroup_Comment_1 = GroupDescription.ToString();

            if (NetLocalGroupAdd(null, 1, ref NewLocalGroup, 0) != 0)
            {
                throw (new Exception("创建用户组时出现错误"));
            }
            else
            {
                return(true);
            }
        }
Exemplo n.º 6
0
        //读取本地用户组信息
        public static string LocalGroupGetInfo(string GroupName)
        {
            IntPtr            bufptr;
            LOCALGROUP_INFO_1 GroupInfo = new LOCALGROUP_INFO_1();

            if (NetLocalGroupGetInfo(null, GroupName.ToString(), 1, out bufptr) != 0)
            {
                throw (new Exception("读取用户组信息时出现错误"));
            }
            else
            {
                GroupInfo = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(bufptr, typeof(LOCALGROUP_INFO_1));
                string tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
                tempStr += "<INFO>\r\n";
                tempStr += "<NAME>" + GroupInfo.LocalGroup_Name_1 + "</NAME>\r\n";
                tempStr += "<DESCRIPTION>" + GroupInfo.LocalGroup_Comment_1 + "</DESCRIPTION>\r\n";
                tempStr += "</INFO>\r\n";
                NetApiBufferFree(bufptr);
                return(tempStr);
            }
        }
Exemplo n.º 7
0
        public static WindowsGroup TryGetLocalGroup(string groupname)
        {
            LOCALGROUP_INFO_1 g = new LOCALGROUP_INFO_1();

            {
                IntPtr buf = new IntPtr();
                int    ret = netapi.NetLocalGroupGetInfo(null, groupname, 1, out buf);
                if (ret != 0)
                {
                    return(null);
                }
                Marshal.PtrToStructure(buf, g);
                netapi.NetApiBufferFree(buf);
            }
            return(new WindowsGroup()
            {
                Name = g.name,
                Comment = g.comment,
                Members = GetLocalGroupMembers(groupname)
            });
        }
Exemplo n.º 8
0
        public static void UpdateLocalGroup(string groupname, DomainGroup group, string[] members = null)
        {
            int ret = 0;

            // rename
            if (!string.Equals(groupname, group.Name, StringComparison.OrdinalIgnoreCase))
            {
                ret = netapi.NetLocalGroupSetInfo(null, groupname, 0, ref group.Name, 0);
                if (ret != 0)
                {
                    throw new Win32Exception(ret);
                }
            }

            // attributes
            var g = new LOCALGROUP_INFO_1()
            {
                name = group.Name, comment = group.Comment
            };

            ret = netapi.NetLocalGroupSetInfo(null, g.name, 1, g, 0);
            if (ret != 0)
            {
                throw new Win32Exception(ret);
            }

            // members
            if (members != null)
            {
                ret = netapi.NetLocalGroupSetMembers(null, group.Name, 3, members, members.Length);
                if (ret != 0)
                {
                    throw new Win32Exception(ret);
                }
            }
            else
            {
                ret = netapi.NetLocalGroupSetMembers(null, group.Name, 3, new string[0], 0);
            }
        }
Exemplo n.º 9
0
        public static void AddLocalGroup(DomainGroup group, string[] members = null)
        {
            int ret = 0;
            var g   = new LOCALGROUP_INFO_1()
            {
                name = group.Name, comment = group.Comment
            };

            ret = netapi.NetLocalGroupAdd(null, 1, g, 0);
            if (ret != 0)
            {
                throw new Win32Exception(ret);
            }

            if (members != null)
            {
                ret = netapi.NetLocalGroupSetMembers(null, group.Name, 3, members, members.Length);
                if (ret != 0)
                {
                    throw new Win32Exception(ret);
                }
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// 枚举全部本地用户组名称
        /// </summary>
        /// <returns></returns>
        public static IList <string> LocalGroupNameEnum()
        {
            IList <string> ret = new List <string>();
            int            entriesread;
            int            totalentries;
            int            resume_handle;
            IntPtr         bufPtr;

            NetLocalGroupEnum(null, 1, out bufPtr, -1, out entriesread, out totalentries, out resume_handle);

            if (entriesread > 0)
            {
                LOCALGROUP_INFO_1[] GroupInfo = new LOCALGROUP_INFO_1[entriesread];
                IntPtr iter = bufPtr;
                for (int i = 0; i < entriesread; i++)
                {
                    GroupInfo[i] = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_INFO_1));
                    iter         = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_INFO_1)));
                    ret.Add(GroupInfo[i].LocalGroup_Name_1);
                }
            }
            return(ret);
        }
Exemplo n.º 11
0
        NetEnumGroups(
            string servername,
            int resumeHandle,
            out LUGEnumStatus enumStatus
            )
        {
            uint result = (uint)LUGAPI.WinError.ERROR_SUCCESS;

            if (String.IsNullOrEmpty(servername))
            {
                servername = null;
            }

            enumStatus = new LUGEnumStatus();
            enumStatus.initializeToNull();
            enumStatus.type = LUGType.Group;

            IntPtr bufPtr = IntPtr.Zero;

            try
            {
                int entriesRead = 0;
                int totalEntries = 0;
                int localResumeHandle = resumeHandle;

                if (!NetApiInitCalled)
                {
                    result = NetApiInit();
                    if (result != (uint)LUGAPI.WinError.ERROR_SUCCESS)
                    {
                        return result;
                    }

                    NetApiInitCalled = true;
                }

                result = apiNetLocalGroupEnum(
                    servername,
                    1,
                    out bufPtr,
                    MAX_PREFERRED_LENGTH,
                    out entriesRead,
                    out totalEntries,
                    ref localResumeHandle
                    );

                if (result != (uint)LUGAPI.WinError.ERROR_SUCCESS &&
                    result != (uint)LUGAPI.WinError.ERROR_MORE_DATA)
                {
                    return result;
                }

                enumStatus.entriesRead = entriesRead;
                enumStatus.totalEntries = totalEntries;
                enumStatus.resumeHandle = localResumeHandle;

                if (entriesRead > 0)
                {
                    LOCALGROUP_INFO_1[] group = new LOCALGROUP_INFO_1[entriesRead];

                    IntPtr iter = bufPtr;

                    enumStatus.entries = new List<string[]>();

                    for (int i = 0; i < entriesRead; i++)
                    {
                        group[i] = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_INFO_1));
                        iter = (IntPtr)((long)iter + Marshal.SizeOf(typeof(LOCALGROUP_INFO_1)));

                        string[] groupInfo ={ "", group[i].name, group[i].comment };
                        enumStatus.entries.Add(groupInfo);
                    }
                }
                if (result == (int)LUGAPI.WinError.ERROR_MORE_DATA)
                {
                    enumStatus.moreEntries = true;
                }

            }
            catch (Exception)
            {
                result = (uint)LUGAPI.WinError.ERROR_EXCEPTION_IN_SERVICE;
            }
            finally
            {
                if (bufPtr != IntPtr.Zero)
                {
                    NetApiBufferFree(bufPtr);
                }
            }

            return result;
        }
Exemplo n.º 12
0
        NetGetGroupInfo(
            string servername,
            string groupname,
            out string description
            )
        {
            uint result = (uint)LUGAPI.WinError.ERROR_SUCCESS;

            if (String.IsNullOrEmpty(servername))
            {
                servername = null;
            }
            if (String.IsNullOrEmpty(groupname))
            {
                groupname = null;
            }

            description = null;

            IntPtr bufPtr = IntPtr.Zero;
            try
            {
                if (!NetApiInitCalled)
                {
                    result = NetApiInit();
                    if (result != (uint)LUGAPI.WinError.ERROR_SUCCESS)
                    {
                        return result;
                    }

                    NetApiInitCalled = true;
                }

                result = (uint)NetLocalGroupGetInfo(servername, groupname, 1, out bufPtr);

                if (bufPtr == IntPtr.Zero)
                {
                    return result;
                }

                LOCALGROUP_INFO_1 localrounpinfo_1 = new LOCALGROUP_INFO_1();
                localrounpinfo_1 = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(bufPtr, typeof(LOCALGROUP_INFO_1));
                description = localrounpinfo_1.comment;
            }
            catch (Exception)
            {
                result = (uint)LUGAPI.WinError.ERROR_EXCEPTION_IN_SERVICE;
            }
            finally
            {
                if (bufPtr != IntPtr.Zero)
                {
                    NetApiBufferFree(bufPtr);
                }
            }

            return result;
        }
Exemplo n.º 13
0
 public static extern NET_API_STATUS NetLocalGroupSetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string groupname, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);
Exemplo n.º 14
0
 extern static int NetLocalGroupSetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string GroupName, int Level, ref LOCALGROUP_INFO_1 buf, int parm_err);
Exemplo n.º 15
0
 public extern static int NetLocalGroupSetInfo(string servername, string groupname, int level, LOCALGROUP_INFO_1 buf, int parm_err);
Exemplo n.º 16
0
        NetEditGroupDescription(
            string servername,
            string groupname,
            string description
            )
        {
            uint result = (uint)LUGAPI.WinError.ERROR_SUCCESS;

            if (String.IsNullOrEmpty(servername))
            {
                servername = null;
            }
            if (String.IsNullOrEmpty(groupname))
            {
                groupname = null;
            }
            if (String.IsNullOrEmpty(description))
            {
                description = null;
            }

            LOCALGROUP_INFO_1 groupinfo_1 = new LOCALGROUP_INFO_1();
            groupinfo_1.comment = description;

            IntPtr bufptr = IntPtr.Zero;
            bufptr = Marshal.AllocHGlobal(Marshal.SizeOf(groupinfo_1));

            try
            {
                if (!NetApiInitCalled)
                {
                    result = NetApiInit();
                    if (result != (uint)LUGAPI.WinError.ERROR_SUCCESS)
                    {
                        return result;
                    }

                    NetApiInitCalled = true;
                }

                Marshal.StructureToPtr(groupinfo_1, bufptr, false);

                result = (uint)NetLocalGroupSetInfo(servername, groupname, 1, bufptr, IntPtr.Zero);
            }
            catch (Exception)
            {
                result = (uint)LUGAPI.WinError.ERROR_EXCEPTION_IN_SERVICE;
            }
            finally
            {
                Marshal.DestroyStructure(bufptr, groupinfo_1.GetType());
                Marshal.FreeHGlobal(bufptr);
            }

            return result;

        }
Exemplo n.º 17
0
 public static extern NET_API_STATUS NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, uint level, ref LOCALGROUP_INFO_1 localGroupInfo, ref int error);
Exemplo n.º 18
0
        apiNetAddGroup(
            string servername,
            string groupname,
            string description
            )
        {
            uint result = (uint)LUGAPI.WinError.ERROR_SUCCESS;

            LOCALGROUP_INFO_1 lg1 = new LOCALGROUP_INFO_1();
            lg1.name = groupname;
            lg1.comment = description;
            UInt32 parm_err = 0;

            IntPtr bufptr = Marshal.AllocHGlobal(Marshal.SizeOf(lg1));
            IntPtr bufptr_parm_err = Marshal.AllocHGlobal(Marshal.SizeOf(parm_err));

            try
            {
                Marshal.StructureToPtr(lg1, bufptr, false);
                result = (uint)NetLocalGroupAdd(servername, 1, bufptr, bufptr_parm_err);
            }
            catch (Exception)
            {
                result = (uint)LUGAPI.WinError.ERROR_EXCEPTION_IN_SERVICE;
            }
            finally
            {
                Marshal.DestroyStructure(bufptr, lg1.GetType());
                Marshal.FreeHGlobal(bufptr);
                Marshal.FreeHGlobal(bufptr_parm_err);

            }
            return result;
        }
Exemplo n.º 19
0
 extern static int NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string serverName,
                                    int level,
                                    ref LOCALGROUP_INFO_1 buf,
                                    int parm_err);