internal static extern NtStatus SamEnumerateAliasesInDomain( SafeSamHandle DomainHandle, ref int EnumerationContext, out SafeSamMemoryBuffer Buffer, // PSAM_RID_ENUMERATION int PreferedMaximumLength, out int CountReturned );
internal static extern NtStatus SamGetAliasMembership( SafeSamHandle DomainHandle, int PassedCount, IntPtr[] Sids, // PSID out int MembershipCount, out SafeSamMemoryBuffer Aliases // PULONG );
internal static extern NtStatus SamEnumerateDomainsInSamServer( SafeSamHandle ServerHandle, ref int EnumerationContext, out SafeSamMemoryBuffer Buffer, int PreferedMaximumLength, out int CountReturned );
internal static extern NtStatus SamLookupIdsInDomain( SafeSamHandle DomainHandle, int Count, uint[] RelativeIds, out SafeSamMemoryBuffer Names, // PUNICODE_STRING out SafeSamMemoryBuffer Use // PSID_NAME_USE );
internal static extern NtStatus SamLookupNamesInDomain( SafeSamHandle DomainHandle, int Count, [In] UnicodeStringIn[] Names, out SafeSamMemoryBuffer RelativeIds, // PULONG out SafeSamMemoryBuffer Use // PSID_NAME_USE );
internal static extern NtStatus SamCreateGroupInDomain( SafeSamHandle DomainHandle, UnicodeString Name, SamGroupAccessRights DesiredAccess, out SafeSamHandle GroupHandle, out uint RelativeId );
internal static extern NtStatus SamEnumerateUsersInDomain( SafeSamHandle DomainHandle, ref int EnumerationContext, UserAccountControlFlags UserAccountControl, out SafeSamMemoryBuffer Buffer, // PSAM_RID_ENUMERATION * int PreferedMaximumLength, out int CountReturned );
public void ReleaseHandle() { if (this.Handle != null) { this.Handle.Dispose(); this.Handle = null; } }
private protected SamObject(SafeSamHandle handle, AccessMask granted_access, string type_name, string object_name, string server_name) { _handle = handle; _granted_access = granted_access; NtType = NtType.GetTypeByName(type_name); ObjectName = object_name; ServerName = server_name; }
internal SamDomain(SafeSamHandle handle, SamDomainAccessRights granted_access, string server_name, string domain_name, Sid domain_sid) : base(handle, granted_access, SamUtils.SAM_DOMAIN_NT_TYPE_NAME, $"SAM Domain ({domain_name ?? domain_sid.ToString()})", server_name) { DomainId = domain_sid; if (domain_name != null) { _name = new Lazy <string>(() => domain_name); } else { _name = new Lazy <string>(() => string.Empty); } }
private SamUser CreateUserObject(SafeSamHandle user_handle, SamUserAccessRights desired_access, string name, uint user_id) { try { Sid sid = RidToSid(user_id, false).GetResultOrDefault(); if (sid == null) { sid = DomainId.CreateRelative(user_id); } if (name == null) { name = LookupId(user_id, false).GetResultOrDefault()?.Name ?? sid.ToString(); } return(new SamUser(user_handle, desired_access, ServerName, name, sid)); } catch { user_handle.Dispose(); throw; } }
private T CreateObject <T>(SafeSamHandle handle, uint user_id, string name, Func <string, Sid, T> func) { try { Sid sid = RidToSid(user_id, false).GetResultOrDefault(); if (sid == null) { sid = DomainId.CreateRelative(user_id); } if (name == null) { name = LookupId(user_id, false).GetResultOrDefault()?.Name ?? sid.ToString(); } return(func(name, sid)); } catch { handle.Dispose(); throw; } }
internal static extern NtStatus SamOpenAlias( SafeSamHandle DomainHandle, SamAliasAccessRights DesiredAccess, uint AliasId, out SafeSamHandle AliasHandle );
internal static extern NtStatus SamGetMembersInGroup( SafeSamHandle GroupHandle, out SafeSamMemoryBuffer MemberIds, // PULONG * out SafeSamMemoryBuffer Attributes, // PULONG * out int MemberCount );
internal static extern NtStatus SamOpenDomain( SafeSamHandle ServerHandle, SamDomainAccessRights DesiredAccess, SafeSidBufferHandle DomainId, out SafeSamHandle DomainHandle );
internal static extern NtStatus SamRidToSid( SafeSamHandle ObjectHandle, uint Rid, out SafeSamMemoryBuffer Sid );
internal static extern NtStatus SamLookupDomainInSamServer( SafeSamHandle ServerHandle, UnicodeString Name, out SafeSamMemoryBuffer DomainId );
internal static extern NtStatus SamGetMembersInAlias( SafeSamHandle AliasHandle, out SafeSamMemoryBuffer MemberIds, // PSID ** out int MemberCount );
internal static extern NtStatus SamChangePasswordUser( SafeSamHandle UserHandle, UnicodeStringSecure OldPassword, UnicodeStringSecure NewPassword );
internal static extern NtStatus SamSetSecurityObject( SafeSamHandle ObjectHandle, SecurityInformation SecurityInformation, SafeBuffer SecurityDescriptor );
internal static extern NtStatus SamConnect( UnicodeString ServerName, out SafeSamHandle ServerHandle, AccessMask DesiredAccess, ObjectAttributes ObjectAttributes );
internal static extern NtStatus SamDeleteGroup( SafeSamHandle GroupHandle );
internal static extern NtStatus SamOpenUser( SafeSamHandle DomainHandle, SamUserAccessRights DesiredAccess, uint UserId, out SafeSamHandle UserHandle );
internal static extern NtStatus SamQueryInformationUser( SafeSamHandle UserHandle, UserInformationClass UserInformationClass, out SafeSamMemoryBuffer Buffer );
internal static extern NtStatus SamOpenGroup( SafeSamHandle DomainHandle, SamGroupAccessRights DesiredAccess, uint GroupId, out SafeSamHandle GroupHandle );
internal static extern NtStatus SamQuerySecurityObject( SafeSamHandle ObjectHandle, SecurityInformation SecurityInformation, out SafeSamMemoryBuffer SecurityDescriptor );
internal static extern NtStatus SamQueryInformationGroup( SafeSamHandle GroupHandle, GROUP_INFORMATION_CLASS GroupInformationClass, out SafeSamMemoryBuffer Buffer );
internal static extern NtStatus SamSetInformationUser( SafeSamHandle UserHandle, UserInformationClass UserInformationClass, SafeBuffer Buffer );
internal static extern NtStatus SamQueryInformationDomain( SafeSamHandle DomainHandle, DomainInformationClass DomainInformationClass, out SafeSamMemoryBuffer Buffer );
internal static extern NtStatus SamSetInformationGroup( SafeSamHandle GroupHandle, GROUP_INFORMATION_CLASS GroupInformationClass, SafeBuffer Buffer );