public Sid[] GetMembers() { NtStatus status; IntPtr members; int count; if ((status = Win32.SamGetMembersInAlias( this, out members, out count )) >= NtStatus.Error) { Win32.Throw(status); } using (var membersAlloc = new SamMemoryAlloc(members)) { Sid[] sids = new Sid[count]; for (int i = 0; i < sids.Length; i++) { sids[i] = new Sid(membersAlloc.ReadIntPtr(0, i)); } return(sids); } }
public string[] LookupIds(int[] relativeIds, out SidNameUse[] uses) { NtStatus status; IntPtr names; IntPtr use; if ((status = Win32.SamLookupIdsInDomain( this, relativeIds.Length, relativeIds, out names, out use )) >= NtStatus.Error) { Win32.Throw(status); } using (var namesAlloc = new SamMemoryAlloc(names)) using (var useAlloc = new SamMemoryAlloc(use)) { string[] nameArray = new string[relativeIds.Length]; SidNameUse[] useArray = new SidNameUse[relativeIds.Length]; for (int i = 0; i < relativeIds.Length; i++) { nameArray[i] = namesAlloc.ReadStruct <UnicodeString>(i).Read(); useArray[i] = (SidNameUse)useAlloc.ReadInt32(0, i); } uses = useArray; return(nameArray); } }
public int[] GetAliasMembership(Sid sid) { NtStatus status; IntPtr aliases; int count; if ((status = Win32.SamGetAliasMembership( this, 1, new IntPtr[] { sid }, out count, out aliases )) >= NtStatus.Error) { Win32.Throw(status); } if (aliases != IntPtr.Zero) { using (var aliasesAlloc = new SamMemoryAlloc(aliases)) return(aliasesAlloc.ReadInt32Array(0, count)); } else { return(new int[0]); } }
public string[] LookupIds(int[] relativeIds, out SidNameUse[] uses) { IntPtr names; IntPtr use; Win32.SamLookupIdsInDomain( this, relativeIds.Length, relativeIds, out names, out use ).ThrowIf(); using (SamMemoryAlloc namesAlloc = new SamMemoryAlloc(names)) using (SamMemoryAlloc useAlloc = new SamMemoryAlloc(use)) { string[] nameArray = new string[relativeIds.Length]; SidNameUse[] useArray = new SidNameUse[relativeIds.Length]; for (int i = 0; i < relativeIds.Length; i++) { nameArray[i] = namesAlloc.ReadStruct <UnicodeString>(0, UnicodeString.SizeOf, i).Text; useArray[i] = (SidNameUse)useAlloc.ReadInt32(0, i); } uses = useArray; return(nameArray); } }
public Sid LookupDomain(string name) { NtStatus status; UnicodeString nameStr; IntPtr domainId; nameStr = new UnicodeString(name); try { if ((status = Win32.SamLookupDomainInSamServer( this, ref nameStr, out domainId )) >= NtStatus.Error) { Win32.Throw(status); } } finally { nameStr.Dispose(); } using (var domainIdAlloc = new SamMemoryAlloc(domainId)) return(new Sid(domainIdAlloc)); }
public void EnumDomains(EnumDomainsDelegate callback) { int enumerationContext = 0; IntPtr buffer; int count; while (true) { Win32.SamEnumerateDomainsInSamServer( this, ref enumerationContext, out buffer, 0x100, out count ).ThrowIf(); if (count == 0) { break; } using (SamMemoryAlloc bufferAlloc = new SamMemoryAlloc(buffer)) { for (int i = 0; i < count; i++) { SamSidEnumeration data = bufferAlloc.ReadStruct <SamSidEnumeration>(0, SamSidEnumeration.SizeOf, i); if (!callback(data.Name.Text)) { return; } } } } }
public Sid GetSid(int relativeId) { IntPtr sid; Win32.SamRidToSid( this, relativeId, out sid ).ThrowIf(); using (SamMemoryAlloc sidAlloc = new SamMemoryAlloc(sid)) return(new Sid(sidAlloc)); }
public int[] LookupNames(string[] names, out SidNameUse[] uses) { NtStatus status; UnicodeString[] nameStr; IntPtr relativeIds; IntPtr use; nameStr = new UnicodeString[names.Length]; for (int i = 0; i < names.Length; i++) { nameStr[i] = new UnicodeString(names[i]); } try { if ((status = Win32.SamLookupNamesInDomain( this, names.Length, nameStr, out relativeIds, out use )) >= NtStatus.Error) { Win32.Throw(status); } } finally { for (int i = 0; i < names.Length; i++) { nameStr[i].Dispose(); } } using (var relativeIdsAlloc = new SamMemoryAlloc(relativeIds)) using (var useAlloc = new SamMemoryAlloc(use)) { SidNameUse[] useArray = new SidNameUse[names.Length]; for (int i = 0; i < names.Length; i++) { useArray[i] = (SidNameUse)useAlloc.ReadInt32(0, i); } uses = useArray; return(relativeIdsAlloc.ReadInt32Array(0, names.Length)); } }
public DomainPasswordPolicy GetPasswordPolicy() { using (SamMemoryAlloc data = this.GetInformation(DomainInformationClass.DomainPasswordInformation)) { DomainPasswordInformation info = data.ReadStruct <DomainPasswordInformation>(); return(new DomainPasswordPolicy( info.MinPasswordLength, info.PasswordHistoryLength, info.PasswordProperties, new TimeSpan(-info.MaxPasswordAge), new TimeSpan(-info.MinPasswordAge) )); } }
public Sid GetSid(int relativeId) { NtStatus status; IntPtr sid; if ((status = Win32.SamRidToSid( this, relativeId, out sid )) >= NtStatus.Error) { Win32.Throw(status); } using (var sidAlloc = new SamMemoryAlloc(sid)) return(new Sid(sidAlloc)); }
public int[] GetGroups() { NtStatus status; IntPtr groups; int count; if ((status = Win32.SamGetGroupsForUser( this, out groups, out count )) >= NtStatus.Error) { Win32.Throw(status); } using (var groupsAlloc = new SamMemoryAlloc(groups)) { return(groupsAlloc.ReadInt32Array(0, count)); } }
public void EnumUsers(EnumUsersDelegate callback, UserAccountFlags flags) { NtStatus status; int enumerationContext = 0; IntPtr buffer; int count; while (true) { status = Win32.SamEnumerateUsersInDomain( this, ref enumerationContext, flags, out buffer, 0x100, out count ); if (status >= NtStatus.Error) { Win32.Throw(status); } if (count == 0) { break; } using (var bufferAlloc = new SamMemoryAlloc(buffer)) { for (int i = 0; i < count; i++) { var data = bufferAlloc.ReadStruct <SamRidEnumeration>(i); if (!callback(data.Name.Read(), data.RelativeId)) { return; } } } } }
public int[] GetAliasMembership(Sid sid) { IntPtr aliases; int count; Win32.SamGetAliasMembership( this, 1, new IntPtr[] { sid }, out count, out aliases ).ThrowIf(); if (aliases != IntPtr.Zero) { using (var aliasesAlloc = new SamMemoryAlloc(aliases)) return(aliasesAlloc.ReadInt32Array(0, count)); } return(new int[0]); }
public void EnumDomains(EnumDomainsDelegate callback) { NtStatus status; int enumerationContext = 0; IntPtr buffer; int count; while (true) { status = Win32.SamEnumerateDomainsInSamServer( this, ref enumerationContext, out buffer, 0x100, out count ); if (status >= NtStatus.Error) { Win32.Throw(status); } if (count == 0) { break; } using (var bufferAlloc = new SamMemoryAlloc(buffer)) { for (int i = 0; i < count; i++) { var data = bufferAlloc.ReadStruct <SamSidEnumeration>(i); if (!callback(data.Name.Read())) { return; } } } } }
public Sid LookupDomain(string name) { IntPtr domainId; UnicodeString nameStr = new UnicodeString(name); try { Win32.SamLookupDomainInSamServer( this, ref nameStr, out domainId ).ThrowIf(); } finally { nameStr.Dispose(); } using (var domainIdAlloc = new SamMemoryAlloc(domainId)) return(new Sid(domainIdAlloc)); }
public int[] GetMembers() { NtStatus status; IntPtr memberIds; IntPtr attributes; int count; if ((status = Win32.SamGetMembersInGroup( this, out memberIds, out attributes, out count )) >= NtStatus.Error) { Win32.Throw(status); } using (var memberIdsAlloc = new SamMemoryAlloc(memberIds)) using (var attributesAlloc = new SamMemoryAlloc(attributes)) { return(memberIdsAlloc.ReadInt32Array(0, count)); } }
public void EnumUsers(EnumUsersDelegate callback, UserAccountFlags flags) { int enumerationContext = 0; IntPtr buffer; int count; while (true) { Win32.SamEnumerateUsersInDomain( this, ref enumerationContext, flags, out buffer, 0x100, out count ).ThrowIf(); if (count == 0) { break; } using (SamMemoryAlloc bufferAlloc = new SamMemoryAlloc(buffer)) { for (int i = 0; i < count; i++) { var data = bufferAlloc.ReadStruct <SamRidEnumeration>(0, SamRidEnumeration.SizeOf, i); if (!callback(data.Name.Text, data.RelativeId)) { return; } } } } }