//枚举全部本地用户组信息 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); }
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); } }
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); }
//修改本地用户组信息 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); } }
//添加本地用户组 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); } }
//读取本地用户组信息 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); } }
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) }); }
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); } }
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); } } }
/// <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); }
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; }
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; }
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);
extern static int NetLocalGroupSetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string GroupName, int Level, ref LOCALGROUP_INFO_1 buf, int parm_err);
public extern static int NetLocalGroupSetInfo(string servername, string groupname, int level, LOCALGROUP_INFO_1 buf, int parm_err);
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; }
public static extern NET_API_STATUS NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, uint level, ref LOCALGROUP_INFO_1 localGroupInfo, ref int error);
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; }
extern static int NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string serverName, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);