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;
            }
        }
        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;
            }
        }
 /// <summary>
 /// Dispose the policy.
 /// </summary>
 public void Dispose()
 {
     _handle.Dispose();
 }