internal void RemoveQualifiedAcesSpecific(SecurityIdentifier sid, AceQualifier qualifier, int accessMask, AceFlags flags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType) { if (accessMask == 0) { throw new ArgumentException(Environment.GetResourceString("Argument_ArgumentZero"), "accessMask"); } if ((qualifier == AceQualifier.SystemAudit) && (((byte)(flags & AceFlags.AuditFlags)) == 0)) { throw new ArgumentException(Environment.GetResourceString("Arg_EnumAtLeastOneFlag"), "flags"); } if (sid == null) { throw new ArgumentNullException("sid"); } this.ThrowIfNotCanonical(); for (int i = 0; i < this.Count; i++) { QualifiedAce ace = this._acl[i] as QualifiedAce; if ((((ace == null) || (((byte)(ace.AceFlags & AceFlags.Inherited)) != 0)) || ((ace.AceQualifier != qualifier) || (ace.SecurityIdentifier != sid))) || ((ace.AceFlags != flags) || (ace.AccessMask != accessMask))) { continue; } if (this.IsDS) { if ((ace is ObjectAce) && (objectFlags != ObjectAceFlags.None)) { ObjectAce ace2 = ace as ObjectAce; if (ace2.ObjectTypesMatch(objectFlags, objectType) && ace2.InheritedObjectTypesMatch(objectFlags, inheritedObjectType)) { goto Label_00F2; } continue; } if ((ace is ObjectAce) || (objectFlags != ObjectAceFlags.None)) { continue; } } Label_00F2: this._acl.RemoveAce(i); i--; } this.OnAclModificationTried(); }
private bool GetInheritanceFlagsForRemoval(QualifiedAce ace, ObjectAceFlags objectFlags, Guid inheritedObjectType, ref AceFlags aceFlags) { if ((((byte)(ace.AceFlags & AceFlags.ContainerInherit)) != 0) && (((byte)(aceFlags & AceFlags.ContainerInherit)) != 0)) { if (ace is ObjectAce) { ObjectAce ace2 = ace as ObjectAce; if (((objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != ObjectAceFlags.None) && ((ace2.ObjectAceFlags & ObjectAceFlags.InheritedObjectAceTypePresent) == ObjectAceFlags.None)) { return(false); } if (!(((objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent) == ObjectAceFlags.None) || ace2.InheritedObjectTypesMatch(objectFlags, inheritedObjectType))) { aceFlags = (AceFlags)((byte)(((int)aceFlags) & 240)); } } else if ((objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != ObjectAceFlags.None) { return(false); } } return(true); }