示例#1
0
        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);
 }