/// <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; } }
/// <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; } }