private void CreateFromParts(System.Security.AccessControl.ControlFlags flags, SecurityIdentifier owner, SecurityIdentifier group, RawAcl systemAcl, RawAcl discretionaryAcl)
 {
     this.SetFlags(flags);
     this.Owner                  = owner;
     this.Group                  = group;
     this.SystemAcl              = systemAcl;
     this.DiscretionaryAcl       = discretionaryAcl;
     this.ResourceManagerControl = 0;
 }
示例#2
0
 private void CreateFromParts(bool isContainer, bool isDS, System.Security.AccessControl.ControlFlags flags, SecurityIdentifier owner, SecurityIdentifier group, System.Security.AccessControl.SystemAcl systemAcl, System.Security.AccessControl.DiscretionaryAcl discretionaryAcl)
 {
     if ((systemAcl != null) && (systemAcl.IsContainer != isContainer))
     {
         throw new ArgumentException(Environment.GetResourceString(isContainer ? "AccessControl_MustSpecifyContainerAcl" : "AccessControl_MustSpecifyLeafObjectAcl"), "systemAcl");
     }
     if ((discretionaryAcl != null) && (discretionaryAcl.IsContainer != isContainer))
     {
         throw new ArgumentException(Environment.GetResourceString(isContainer ? "AccessControl_MustSpecifyContainerAcl" : "AccessControl_MustSpecifyLeafObjectAcl"), "discretionaryAcl");
     }
     this._isContainer = isContainer;
     if ((systemAcl != null) && (systemAcl.IsDS != isDS))
     {
         throw new ArgumentException(Environment.GetResourceString(isDS ? "AccessControl_MustSpecifyDirectoryObjectAcl" : "AccessControl_MustSpecifyNonDirectoryObjectAcl"), "systemAcl");
     }
     if ((discretionaryAcl != null) && (discretionaryAcl.IsDS != isDS))
     {
         throw new ArgumentException(Environment.GetResourceString(isDS ? "AccessControl_MustSpecifyDirectoryObjectAcl" : "AccessControl_MustSpecifyNonDirectoryObjectAcl"), "discretionaryAcl");
     }
     this._isDS = isDS;
     this._sacl = systemAcl;
     if (discretionaryAcl == null)
     {
         discretionaryAcl = System.Security.AccessControl.DiscretionaryAcl.CreateAllowEveryoneFullAccess(this._isDS, this._isContainer);
     }
     this._dacl = discretionaryAcl;
     System.Security.AccessControl.ControlFlags flags2 = flags | System.Security.AccessControl.ControlFlags.DiscretionaryAclPresent;
     if (systemAcl == null)
     {
         flags2 &= ~System.Security.AccessControl.ControlFlags.SystemAclPresent;
     }
     else
     {
         flags2 |= System.Security.AccessControl.ControlFlags.SystemAclPresent;
     }
     this._rawSd = new RawSecurityDescriptor(flags2, owner, group, (systemAcl == null) ? null : systemAcl.RawAcl, discretionaryAcl.RawAcl);
 }
 public RawSecurityDescriptor(System.Security.AccessControl.ControlFlags flags, SecurityIdentifier owner, SecurityIdentifier group, RawAcl systemAcl, RawAcl discretionaryAcl)
 {
     this.CreateFromParts(flags, owner, group, systemAcl, discretionaryAcl);
 }
        public RawSecurityDescriptor(byte[] binaryForm, int offset)
        {
            SecurityIdentifier identifier;
            SecurityIdentifier identifier2;
            RawAcl             acl;
            RawAcl             acl2;

            if (binaryForm == null)
            {
                throw new ArgumentNullException("binaryForm");
            }
            if (offset < 0)
            {
                throw new ArgumentOutOfRangeException("offset", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
            }
            if ((binaryForm.Length - offset) < 20)
            {
                throw new ArgumentOutOfRangeException("binaryForm", Environment.GetResourceString("ArgumentOutOfRange_ArrayTooSmall"));
            }
            if (binaryForm[offset] != GenericSecurityDescriptor.Revision)
            {
                throw new ArgumentOutOfRangeException("binaryForm", Environment.GetResourceString("AccessControl_InvalidSecurityDescriptorRevision"));
            }
            byte num = binaryForm[offset + 1];

            System.Security.AccessControl.ControlFlags flags = (System.Security.AccessControl.ControlFlags)(binaryForm[offset + 2] + (binaryForm[offset + 3] << 8));
            if ((flags & System.Security.AccessControl.ControlFlags.SelfRelative) == System.Security.AccessControl.ControlFlags.None)
            {
                throw new ArgumentException(Environment.GetResourceString("AccessControl_InvalidSecurityDescriptorSelfRelativeForm"), "binaryForm");
            }
            int num2 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 4);

            if (num2 != 0)
            {
                identifier = new SecurityIdentifier(binaryForm, offset + num2);
            }
            else
            {
                identifier = null;
            }
            int num3 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 8);

            if (num3 != 0)
            {
                identifier2 = new SecurityIdentifier(binaryForm, offset + num3);
            }
            else
            {
                identifier2 = null;
            }
            int num4 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 12);

            if (((flags & System.Security.AccessControl.ControlFlags.SystemAclPresent) != System.Security.AccessControl.ControlFlags.None) && (num4 != 0))
            {
                acl = new RawAcl(binaryForm, offset + num4);
            }
            else
            {
                acl = null;
            }
            int num5 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 0x10);

            if (((flags & System.Security.AccessControl.ControlFlags.DiscretionaryAclPresent) != System.Security.AccessControl.ControlFlags.None) && (num5 != 0))
            {
                acl2 = new RawAcl(binaryForm, offset + num5);
            }
            else
            {
                acl2 = null;
            }
            this.CreateFromParts(flags, identifier, identifier2, acl, acl2);
            if ((flags & System.Security.AccessControl.ControlFlags.RMControlValid) != System.Security.AccessControl.ControlFlags.None)
            {
                this.ResourceManagerControl = num;
            }
        }
 public void SetFlags(System.Security.AccessControl.ControlFlags flags)
 {
     this._flags = flags | System.Security.AccessControl.ControlFlags.SelfRelative;
 }
 public void SetFlags(System.Security.AccessControl.ControlFlags flags)
 {
     this._flags = flags | System.Security.AccessControl.ControlFlags.SelfRelative;
 }
示例#7
0
 internal void AddControlFlags(System.Security.AccessControl.ControlFlags flags)
 {
     this._rawSd.SetFlags(this._rawSd.ControlFlags | flags);
 }
示例#8
0
 public CommonSecurityDescriptor(bool isContainer, bool isDS, System.Security.AccessControl.ControlFlags flags, SecurityIdentifier owner, SecurityIdentifier group, System.Security.AccessControl.SystemAcl systemAcl, System.Security.AccessControl.DiscretionaryAcl discretionaryAcl)
 {
     this.CreateFromParts(isContainer, isDS, flags, owner, group, systemAcl, discretionaryAcl);
 }
示例#9
0
 private CommonSecurityDescriptor(bool isContainer, bool isDS, System.Security.AccessControl.ControlFlags flags, SecurityIdentifier owner, SecurityIdentifier group, RawAcl systemAcl, RawAcl discretionaryAcl) : this(isContainer, isDS, flags, owner, group, (systemAcl == null) ? null : new System.Security.AccessControl.SystemAcl(isContainer, isDS, systemAcl), (discretionaryAcl == null) ? null : new System.Security.AccessControl.DiscretionaryAcl(isContainer, isDS, discretionaryAcl))
 {
 }
示例#10
0
 internal void UpdateControlFlags(System.Security.AccessControl.ControlFlags flagsToUpdate, System.Security.AccessControl.ControlFlags newFlags)
 {
     System.Security.AccessControl.ControlFlags flags = newFlags | (this._rawSd.ControlFlags & ~flagsToUpdate);
     this._rawSd.SetFlags(flags);
 }
示例#11
0
 internal void RemoveControlFlags(System.Security.AccessControl.ControlFlags flags)
 {
     this._rawSd.SetFlags(this._rawSd.ControlFlags & ~flags);
 }