Пример #1
0
 internal static extern NtStatus SamCreateGroupInDomain(
     SafeSamHandle DomainHandle,
     UnicodeString Name,
     SamGroupAccessRights DesiredAccess,
     out SafeSamHandle GroupHandle,
     out uint RelativeId
     );
        /// <summary>
        /// Open a group by SID.
        /// </summary>
        /// <param name="sid">The sid for the group.</param>
        /// <param name="desired_access">The desired access for the group object.</param>
        /// <param name="throw_on_error">True to throw on error.</param>
        /// <returns>The SAM group object.</returns>
        public NtResult <SamGroup> OpenGroup(Sid sid, SamGroupAccessRights desired_access, bool throw_on_error)
        {
            if (sid.SubAuthorities.Count != DomainId.SubAuthorities.Count + 1 || !sid.StartsWith(DomainId))
            {
                return(NtStatus.STATUS_NO_SUCH_DOMAIN.CreateResultFromError <SamGroup>(throw_on_error));
            }

            return(OpenGroup(sid.SubAuthorities.Last(), null, desired_access, throw_on_error));
        }
        /// <summary>
        /// Open a group by name.
        /// </summary>
        /// <param name="name">The name for the group.</param>
        /// <param name="desired_access">The desired access for the group object.</param>
        /// <param name="throw_on_error">True to throw on error.</param>
        /// <returns>The SAM group object.</returns>
        public NtResult <SamGroup> OpenGroup(string name, SamGroupAccessRights desired_access, bool throw_on_error)
        {
            var sid_name = LookupName(name, throw_on_error);

            if (!sid_name.IsSuccess)
            {
                return(sid_name.Cast <SamGroup>());
            }

            var sid = Sid.Parse(sid_name.Result.Sddl, throw_on_error);

            if (!sid.IsSuccess)
            {
                return(sid.Cast <SamGroup>());
            }

            return(OpenGroup(sid.Result, desired_access, throw_on_error));
        }
Пример #4
0
 internal static extern NtStatus SamOpenGroup(
     SafeSamHandle DomainHandle,
     SamGroupAccessRights DesiredAccess,
     uint GroupId,
     out SafeSamHandle GroupHandle
     );
 /// <summary>
 /// Enumerate and open accessible group objects.
 /// </summary>
 /// <param name="desired_access">The desired access for the opened groups.</param>
 /// <returns>The list of accessible groups.</returns>
 public IReadOnlyList <SamGroup> OpenAccessibleGroups(SamGroupAccessRights desired_access)
 {
     return(OpenAccessibleGroups(desired_access, true).Result);
 }
 /// <summary>
 /// Enumerate and open accessible group objects.
 /// </summary>
 /// <param name="desired_access">The desired access for the opened groups.</param>
 /// <param name="throw_on_error">True to throw on error.</param>
 /// <returns>The list of accessible groups.</returns>
 public NtResult <IReadOnlyList <SamGroup> > OpenAccessibleGroups(SamGroupAccessRights desired_access, bool throw_on_error)
 {
     return(EnumerateGroups(throw_on_error).Map <IReadOnlyList <SamGroup> >(e => e.Select(
                                                                                s => OpenGroup(s.RelativeId, s.Name, desired_access, false).GetResultOrDefault()).Where(a => a != null).ToList().AsReadOnly()));
 }
 /// <summary>
 /// Open a group by name.
 /// </summary>
 /// <param name="name">The name for the group.</param>
 /// <param name="desired_access">The desired access for the group object.</param>
 /// <returns>The SAM group object.</returns>
 public SamGroup OpenGroup(string name, SamGroupAccessRights desired_access)
 {
     return(OpenGroup(name, desired_access, true).Result);
 }
 /// <summary>
 /// Open a group by SID.
 /// </summary>
 /// <param name="sid">The sid for the group.</param>
 /// <param name="desired_access">The desired access for the group object.</param>
 /// <returns>The SAM group object.</returns>
 public SamGroup OpenGroup(Sid sid, SamGroupAccessRights desired_access)
 {
     return(OpenGroup(sid, desired_access, true).Result);
 }
 /// <summary>
 /// Open a group by relative ID.
 /// </summary>
 /// <param name="group_id">The ID for the group.</param>
 /// <param name="desired_access">The desired access for the group object.</param>
 /// <returns>The SAM group object.</returns>
 public SamGroup OpenGroup(uint group_id, SamGroupAccessRights desired_access)
 {
     return(OpenGroup(group_id, desired_access, true).Result);
 }
 /// <summary>
 /// Open a group by relative ID.
 /// </summary>
 /// <param name="group_id">The ID for the group.</param>
 /// <param name="desired_access">The desired access for the group object.</param>
 /// <param name="throw_on_error">True to throw on error.</param>
 /// <returns>The SAM group object.</returns>
 public NtResult <SamGroup> OpenGroup(uint group_id, SamGroupAccessRights desired_access, bool throw_on_error)
 {
     return(OpenGroup(group_id, null, desired_access, throw_on_error));
 }
 private NtResult <SamGroup> OpenGroup(uint group_id, string name, SamGroupAccessRights desired_access, bool throw_on_error)
 {
     return(SecurityNativeMethods.SamOpenGroup(Handle, desired_access, group_id, out SafeSamHandle handle).CreateResult(throw_on_error,
                                                                                                                        () => CreateObject(handle, group_id, name, (n, s) => new SamGroup(handle, desired_access, ServerName, n, s))));
 }
Пример #12
0
 /// <summary>
 /// Create a new group object.
 /// </summary>
 /// <param name="name">The name of the group.</param>
 /// <param name="desired_access">The desired access for the group object.</param>
 /// <param name="throw_on_error">True to throw on error.</param>
 /// <returns>The SAM group object.</returns>
 public NtResult <SamGroup> CreateGroup(string name, SamGroupAccessRights desired_access, bool throw_on_error)
 {
     return(SecurityNativeMethods.SamCreateGroupInDomain(Handle, new UnicodeString(name), desired_access,
                                                         out SafeSamHandle group_handle, out uint rid).CreateResult(throw_on_error,
                                                                                                                    () => new SamGroup(group_handle, desired_access, ServerName, name, DomainId.CreateRelative(rid))));
 }
 internal SamGroup(SafeSamHandle handle, SamGroupAccessRights granted_access, string server_name, string group_name, Sid sid)
     : base(handle, granted_access, SamUtils.SAM_GROUP_NT_TYPE_NAME, group_name, server_name)
 {
     Sid  = sid;
     Name = group_name;
 }