internal void SetDomainPasswordInformation(SecurityIdentifier domainSid, DOMAIN_PASSWORD_INFORMATION passwordInformation) { if (domainSid == null) { throw new ArgumentNullException(nameof(domainSid)); } var sid = new byte[domainSid.BinaryLength]; domainSid.GetBinaryForm(sid, 0); Check(SamOpenDomain(_handle, DOMAIN_ACCESS_MASK.DOMAIN_WRITE_PASSWORD_PARAMS, sid, out IntPtr domain)); IntPtr info = Marshal.AllocHGlobal(Marshal.SizeOf(passwordInformation)); Marshal.StructureToPtr(passwordInformation, info, false); try { Check(SamSetInformationDomain(domain, DOMAIN_INFORMATION_CLASS.DomainPasswordInformation, info)); } finally { Marshal.FreeHGlobal(info); SamCloseHandle(domain); } }
internal SamDomainPasswordInformation(DOMAIN_PASSWORD_INFORMATION info) { MinimumLength = info.MinPasswordLength; HistoryLength = info.PasswordHistoryLength; Properties = (SamDomainPasswordPropertyFlags)info.PasswordProperties; MaximumAge = TimeSpan.FromTicks(-info.MaxPasswordAge.QuadPart); MinimumAge = TimeSpan.FromTicks(-info.MinPasswordAge.QuadPart); }