UnmarshalInt() static private method

static private UnmarshalInt ( byte binaryForm, int offset ) : int
binaryForm byte
offset int
return int
Example #1
0
        /// <summary>使用指定的字节值数组初始化 <see cref="T:System.Security.AccessControl.RawSecurityDescriptor" /> 类的新实例。</summary>
        /// <param name="binaryForm">用于创建新的 <see cref="T:System.Security.AccessControl.RawSecurityDescriptor" /> 对象的字节值数组。</param>
        /// <param name="offset">
        /// <paramref name="binaryForm" /> 数组中第一个要复制的元素的偏移量。</param>
        public RawSecurityDescriptor(byte[] binaryForm, int offset)
        {
            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 ((int)binaryForm[offset + 0] != (int)GenericSecurityDescriptor.Revision)
            {
                throw new ArgumentOutOfRangeException("binaryForm", Environment.GetResourceString("AccessControl_InvalidSecurityDescriptorRevision"));
            }
            byte         num1  = binaryForm[offset + 1];
            ControlFlags flags = (ControlFlags)((int)binaryForm[offset + 2] + ((int)binaryForm[offset + 3] << 8));

            if ((flags & ControlFlags.SelfRelative) == ControlFlags.None)
            {
                throw new ArgumentException(Environment.GetResourceString("AccessControl_InvalidSecurityDescriptorSelfRelativeForm"), "binaryForm");
            }
            int num2 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 4);
            SecurityIdentifier owner = num2 == 0 ? (SecurityIdentifier)null : new SecurityIdentifier(binaryForm, offset + num2);
            int num3 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 8);
            SecurityIdentifier group = num3 == 0 ? (SecurityIdentifier)null : new SecurityIdentifier(binaryForm, offset + num3);
            int    num4             = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 12);
            RawAcl systemAcl        = (flags & ControlFlags.SystemAclPresent) == ControlFlags.None || num4 == 0 ? (RawAcl)null : new RawAcl(binaryForm, offset + num4);
            int    num5             = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 16);
            RawAcl discretionaryAcl = (flags & ControlFlags.DiscretionaryAclPresent) == ControlFlags.None || num5 == 0 ? (RawAcl)null : new RawAcl(binaryForm, offset + num5);

            this.CreateFromParts(flags, owner, group, systemAcl, discretionaryAcl);
            if ((flags & ControlFlags.RMControlValid) == ControlFlags.None)
            {
                return;
            }
            this.ResourceManagerControl = num1;
        }
        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;
            }
        }
Example #3
0
        /// <summary>Initializes a new instance of the <see cref="T:System.Security.AccessControl.RawSecurityDescriptor" /> class from the specified array of byte values.</summary>
        /// <param name="binaryForm">The array of byte values from which to create the new <see cref="T:System.Security.AccessControl.RawSecurityDescriptor" /> object.</param>
        /// <param name="offset">The offset in the  <paramref name="binaryForm" /> array at which to begin copying.</param>
        // Token: 0x06002063 RID: 8291 RVA: 0x0007194C File Offset: 0x0006FB4C
        public RawSecurityDescriptor(byte[] binaryForm, int offset)
        {
            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         resourceManagerControl = binaryForm[offset + 1];
            ControlFlags controlFlags           = (ControlFlags)((int)binaryForm[offset + 2] + ((int)binaryForm[offset + 3] << 8));

            if ((controlFlags & ControlFlags.SelfRelative) == ControlFlags.None)
            {
                throw new ArgumentException(Environment.GetResourceString("AccessControl_InvalidSecurityDescriptorSelfRelativeForm"), "binaryForm");
            }
            int num = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 4);
            SecurityIdentifier owner;

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

            if (num2 != 0)
            {
                group = new SecurityIdentifier(binaryForm, offset + num2);
            }
            else
            {
                group = null;
            }
            int    num3 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 12);
            RawAcl systemAcl;

            if ((controlFlags & ControlFlags.SystemAclPresent) != ControlFlags.None && num3 != 0)
            {
                systemAcl = new RawAcl(binaryForm, offset + num3);
            }
            else
            {
                systemAcl = null;
            }
            int    num4 = GenericSecurityDescriptor.UnmarshalInt(binaryForm, offset + 16);
            RawAcl discretionaryAcl;

            if ((controlFlags & ControlFlags.DiscretionaryAclPresent) != ControlFlags.None && num4 != 0)
            {
                discretionaryAcl = new RawAcl(binaryForm, offset + num4);
            }
            else
            {
                discretionaryAcl = null;
            }
            this.CreateFromParts(controlFlags, owner, group, systemAcl, discretionaryAcl);
            if ((controlFlags & ControlFlags.RMControlValid) != ControlFlags.None)
            {
                this.ResourceManagerControl = resourceManagerControl;
            }
        }