60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.DirectoryServices;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Disco.Client.Interop
|
|
{
|
|
public static class LocalAuthentication
|
|
{
|
|
|
|
public static bool AddLocalGroupMembership(string GroupName, string UserSID, string Username, string UserDomain)
|
|
{
|
|
|
|
using (DirectoryEntry group = new DirectoryEntry(string.Format("WinNT://./{0},group", GroupName)))
|
|
{
|
|
// Check to see if the User is already a member
|
|
foreach (object memberRef in (IEnumerable)group.Invoke("Members"))
|
|
{
|
|
using (DirectoryEntry member = new DirectoryEntry(memberRef))
|
|
{
|
|
var memberPath = member.Path;
|
|
if (memberPath.Equals(string.Format("WinNT://{0}/{1}", UserDomain, Username), StringComparison.InvariantCultureIgnoreCase) ||
|
|
memberPath.Equals(string.Format("WinNT://{0}", UserSID), StringComparison.InvariantCultureIgnoreCase))
|
|
return false;
|
|
}
|
|
}
|
|
group.Invoke("Add", string.Format("WinNT://{0}", UserSID));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static string CurrentUserDomain
|
|
{
|
|
get
|
|
{
|
|
return Environment.UserDomainName;
|
|
}
|
|
}
|
|
public static string CurrentUserName
|
|
{
|
|
get
|
|
{
|
|
return Environment.UserName;
|
|
}
|
|
}
|
|
|
|
public static string ComputerName
|
|
{
|
|
get
|
|
{
|
|
return Environment.MachineName;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|