53    public sealed override int Count 
 
   93        for (
int i = 0; i < 
array.Length; i++)
 
   98        array[4] = PM.F | PM.CO | 
PM.GO;
 
  102        array[8] = PM.F | PM.CF | 
PM.GF;
 
  106        array[12] = PM.F | PM.CF | PM.CO | PM.GF | 
PM.GO;
 
  107        array[13] = PM.F | PM.CF | 
PM.CO;
 
  108        array[14] = PM.CF | PM.CO | PM.GF | 
PM.GO;
 
 
  116        for (
int i = 0; i < 
array.Length; i++)
 
  124        array[4] = AF.OI | AF.IO | 
AF.NP;
 
  128        array[8] = AF.CI | AF.IO | 
AF.NP;
 
  130        array[28] = AF.CI | AF.OI | 
AF.NP;
 
  131        array[15] = AF.CI | AF.OI | 
AF.IO;
 
  132        array[12] = AF.CI | AF.OI | AF.IO | 
AF.NP;
 
 
  139        if ((aceFlags & 
AceFlags.ContainerInherit) != 0)
 
  143        if (!isDS && (aceFlags & 
AceFlags.ObjectInherit) != 0)
 
  147        if ((aceFlags & 
AceFlags.InheritOnly) != 0)
 
  151        if ((aceFlags & 
AceFlags.NoPropagateInherit) != 0)
 
 
  161        if ((af & 
AF.CI) != 0)
 
  163            aceFlags |= 
AceFlags.ContainerInherit;
 
  165        if (!isDS && (af & 
AF.OI) != 0)
 
  169        if ((af & 
AF.IO) != 0)
 
  173        if ((af & 
AF.NP) != 0)
 
  175            aceFlags |= 
AceFlags.NoPropagateInherit;
 
 
  187        if (pM == 
PM.GO || pM2 == 
PM.GO)
 
 
  209        if (pM == 
PM.GO || pM2 == 
PM.GO)
 
 
  247        case AceType.AccessDeniedCallback:
 
  249        case AceType.AccessDeniedObject:
 
  250        case AceType.AccessDeniedCallbackObject:
 
  253        case AceType.AccessAllowedCallback:
 
  255        case AceType.AccessAllowedObject:
 
  256        case AceType.AccessAllowedCallbackObject:
 
 
  274        case AceType.SystemAuditCallback:
 
  275        case AceType.SystemAlarmCallback:
 
  277        case AceType.SystemAuditObject:
 
  278        case AceType.SystemAlarmObject:
 
  279        case AceType.SystemAuditCallbackObject:
 
  280        case AceType.SystemAlarmCallbackObject:
 
 
  301            int num3 = knownAce.SecurityIdentifier.CompareTo(knownAce2.SecurityIdentifier);
 
 
  314    private void QuickSort(
int left, 
int right, 
bool isDacl)
 
  326            while (
CompareAces(
_acl[right], genericAce, isDacl) != 0 && left < right)
 
  345        _acl[left] = genericAce;
 
 
  362        if (knownAce != 
null && knownAce.
AccessMask == 0)
 
  368            if ((ace.AceFlags & 
AceFlags.InheritOnly) != 0)
 
  372            if ((ace.AceFlags & 
AceFlags.InheritanceFlags) != 0)
 
  379            if ((ace.AceFlags & 
AceFlags.InheritOnly) != 0 && (ace.AceFlags & 
AceFlags.ContainerInherit) == 0 && (ace.AceFlags & 
AceFlags.ObjectInherit) == 0)
 
  383            if ((ace.AceFlags & 
AceFlags.NoPropagateInherit) != 0 && (ace.AceFlags & 
AceFlags.ContainerInherit) == 0 && (ace.AceFlags & 
AceFlags.ObjectInherit) == 0)
 
  385                ace.AceFlags &= 
~AceFlags.NoPropagateInherit;
 
  399            if ((ace.AceFlags & 
AceFlags.AuditFlags) == 0)
 
 
  413        for (
int num = 
_acl.
Count - 1; num >= 0; num--)
 
 
  425        for (ushort num = 0; num < 
_acl.
Count; num++)
 
  427            _acl[num]._indexInAcl = num;
 
  434        for (
int i = 0; i < 
Count - 1; i++)
 
  440                if (!(qualifiedAce == 
null) && 
MergeAces(ref ace, qualifiedAce))
 
 
  453        if (((uint)accessMask & 0x13Bu) != 0)
 
  456            objectFlags |= originalAce.ObjectAceFlags & 
ObjectAceFlags.ObjectAceTypePresent;
 
  458        if ((aceFlags & 
AceFlags.ContainerInherit) != 0)
 
  461            objectFlags |= originalAce.ObjectAceFlags & 
ObjectAceFlags.InheritedObjectAceTypePresent;
 
 
  500        if ((objectAceFlags & 
ObjectAceFlags.InheritedObjectAceTypePresent) == 0)
 
 
  509        if (((uint)(ace.
AccessMask & accessMask) & 0x13Bu) != 0)
 
  518                if ((objectFlags & 
ObjectAceFlags.ObjectAceTypePresent) != 0 && !objectAce.ObjectTypesMatch(objectFlags, objectType))
 
  523            else if ((objectFlags & 
ObjectAceFlags.ObjectAceTypePresent) != 0)
 
 
  538                if ((objectFlags & 
ObjectAceFlags.InheritedObjectAceTypePresent) != 0 && (objectAce.ObjectAceFlags & 
ObjectAceFlags.InheritedObjectAceTypePresent) == 0)
 
  542                if ((objectFlags & 
ObjectAceFlags.InheritedObjectAceTypePresent) != 0 && !objectAce.InheritedObjectTypesMatch(objectFlags, inheritedObjectType))
 
  547            else if ((objectFlags & 
ObjectAceFlags.InheritedObjectAceTypePresent) != 0)
 
 
  559        if (opaque == 
null || opaque2 == 
null)
 
  561            return opaque == opaque2;
 
  563        if (opaque.Length != opaque2.Length)
 
  567        for (
int i = 0; i < opaque.Length; i++)
 
  569            if (opaque[i] != opaque2[i])
 
 
  612        if (ace.AceFlags == newAce.
AceFlags)
 
  629                ace.AceFlags |= newAce.AceFlags & 
AceFlags.AuditFlags;
 
  634                ace.AceFlags |= newAce.AceFlags & 
AceFlags.AuditFlags;
 
  645                    ace.AceFlags = result | (ace.AceFlags & 
AceFlags.AuditFlags);
 
  651                ace.AceFlags = result | (ace.AceFlags & 
AceFlags.AuditFlags);
 
 
  674                    if (qualifiedAce == 
null)
 
  707                if (genericAce2 == 
null)
 
  719                    if (qualifiedAce2 == 
null)
 
  733                else if (num4 < num3)
 
 
  758    internal CommonAcl(
bool isContainer, 
bool isDS, 
RawAcl rawAcl, 
bool trusted, 
bool isDacl)
 
  774            for (
int i = 0; i < rawAcl.
Count; i++)
 
 
  812        if (inheritanceFlags != 0)
 
  816        if (propagationFlags != 0)
 
 
  838        GenericAce ace = ((
IsDS && objectFlags != 0) ? ((
QualifiedAce)
new ObjectAce(flags, qualifier, accessMask, sid, objectFlags, objectType, inheritedObjectType, isCallback: 
false, 
null)) : ((
QualifiedAce)
new CommonAce(flags, qualifier, accessMask, sid, isCallback: 
false, 
null)));
 
  843        for (
int i = 0; i < 
Count; i++)
 
 
  875        GenericAce ace = ((
IsDS && objectFlags != 0) ? ((
QualifiedAce)
new ObjectAce(flags, qualifier, accessMask, sid, objectFlags, objectType, inheritedObjectType, isCallback: 
false, 
null)) : ((
QualifiedAce)
new CommonAce(flags, qualifier, accessMask, sid, isCallback: 
false, 
null)));
 
  880        for (
int i = 0; i < 
Count; i++)
 
 
  911        int num = accessMask;
 
  919                for (
int i = 0; i < 
Count; i++)
 
  930                        if ((qualifiedAce.
AccessMask & accessMask) == 0)
 
  946                    else if ((qualifiedAce.
AccessMask & accessMask) == 0)
 
  950                    if (saclSemantics && (qualifiedAce.
AceFlags & flags & 
AceFlags.AuditFlags) == 0)
 
  972                    num2 = qualifiedAce.AccessMask & ~accessMask;
 
  973                    if (qualifiedAce is 
ObjectAce originalAce)
 
  975                        GetObjectTypesForSplit(originalAce, num2, aceFlags2, out objectFlags2, out objectType2, out inheritedObjectType2);
 
  979                        aceFlags3 = qualifiedAce.AceFlags & (
AceFlags)(~(uint)(flags & 
AceFlags.AuditFlags));
 
  980                        accessMask2 = qualifiedAce.AccessMask & accessMask;
 
  981                        if (qualifiedAce is 
ObjectAce originalAce2)
 
  983                            GetObjectTypesForSplit(originalAce2, accessMask2, aceFlags3, out objectFlags3, out objectType3, out inheritedObjectType3);
 
  986                    aceFlags4 = (qualifiedAce.AceFlags & 
AceFlags.InheritanceFlags) | (flags & qualifiedAce.
AceFlags & 
AceFlags.AuditFlags);
 
  987                    num3 = qualifiedAce.AccessMask & accessMask;
 
  988                    if (!saclSemantics || (aceFlags4 & 
AceFlags.AuditFlags) != 0)
 
  997                            result |= aceFlags4 & 
AceFlags.AuditFlags;
 
  998                            if (qualifiedAce is 
ObjectAce originalAce3)
 
 1000                                GetObjectTypesForSplit(originalAce3, num3, result, out objectFlags4, out objectType4, out inheritedObjectType4);
 
 1018                            qualifiedAce.AceFlags = aceFlags2;
 
 1019                            qualifiedAce.AccessMask = num2;
 
 1020                            if (qualifiedAce is 
ObjectAce objectAce)
 
 1022                                objectAce.ObjectAceFlags = objectFlags2;
 
 1023                                objectAce.ObjectAceType = objectType2;
 
 1024                                objectAce.InheritedObjectAceType = inheritedObjectType2;
 
 1033                    if (saclSemantics && (aceFlags3 & 
AceFlags.AuditFlags) != 0)
 
 1035                        QualifiedAce ace2 = ((!(qualifiedAce is 
CommonAce)) ? ((
QualifiedAce)
new ObjectAce(aceFlags3, qualifier, accessMask2, qualifiedAce.
SecurityIdentifier, objectFlags3, objectType3, inheritedObjectType3, isCallback: 
false, 
null)) : ((
QualifiedAce)
new CommonAce(aceFlags3, qualifier, accessMask2, qualifiedAce.
SecurityIdentifier, isCallback: 
false, 
null)));
 
 1041                        QualifiedAce ace2 = ((!(qualifiedAce is 
CommonAce)) ? ((
QualifiedAce)
new ObjectAce(result, qualifier, num3, qualifiedAce.
SecurityIdentifier, objectFlags4, objectType4, inheritedObjectType4, isCallback: 
false, 
null)) : ((
QualifiedAce)
new CommonAce(result, qualifier, num3, qualifiedAce.
SecurityIdentifier, isCallback: 
false, 
null)));
 
 1052            if (!(flag && flag2))
 
 
 1064        if (accessMask == 0)
 
 1077        for (
int i = 0; i < 
Count; i++)
 
 1086                if (qualifiedAce is 
ObjectAce objectAce && objectFlags != 0)
 
 1088                    if (!objectAce.ObjectTypesMatch(objectFlags, objectType) || !objectAce.InheritedObjectTypesMatch(objectFlags, inheritedObjectType))
 
 1093                else if (qualifiedAce is 
ObjectAce || objectFlags != 0)
 
 
 1117        for (
int num = 
_acl.
Count - 1; num >= 0; num--)
 
 
 1135        for (
int num = 
Count - 1; num >= 0; num--)
 
 
 
static string InvalidOperation_ModificationOfNonCanonicalAcl
 
static string ArgumentOutOfRange_Enum
 
static string Argument_InvalidAnyFlag
 
static string Arg_EnumAtLeastOneFlag
 
static string Argument_ArgumentZero
 
static string NotSupported_SetMethod
 
bool AceFlagsAreMergeable(QualifiedAce ace, QualifiedAce newAce)
 
bool InheritedObjectTypesMatch(QualifiedAce ace, QualifiedAce newAce)
 
CommonAcl(bool isContainer, bool isDS, byte revision, int capacity)
 
CommonAcl(bool isContainer, bool isDS, RawAcl rawAcl, bool trusted, bool isDacl)
 
bool RemoveQualifiedAces(SecurityIdentifier sid, AceQualifier qualifier, int accessMask, AceFlags flags, bool saclSemantics, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
 
static AceFlags AceFlagsFromAF(AF af, bool isDS)
 
void RemoveQualifiedAcesSpecific(SecurityIdentifier sid, AceQualifier qualifier, int accessMask, AceFlags flags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
 
bool AccessMasksAreMergeable(QualifiedAce ace, QualifiedAce newAce)
 
readonly bool _isContainer
 
static AF AFFromAceFlags(AceFlags aceFlags, bool isDS)
 
static bool AceOpaquesMatch(QualifiedAce ace, QualifiedAce newAce)
 
bool ObjectTypesMatch(QualifiedAce ace, QualifiedAce newAce)
 
bool CanonicalCheck(bool isDacl)
 
void RemoveMeaninglessAcesAndFlags(bool isDacl)
 
static bool RemoveInheritanceBits(AceFlags existing, AceFlags remove, bool isDS, out AceFlags result, out bool total)
 
static readonly PM[] s_AFtoPM
 
void CheckFlags(InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags)
 
void CanonicalizeIfNecessary()
 
void AddQualifiedAce(SecurityIdentifier sid, AceQualifier qualifier, int accessMask, AceFlags flags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
 
bool GetInheritanceFlagsForRemoval(QualifiedAce ace, ObjectAceFlags objectFlags, Guid inheritedObjectType, ref AceFlags aceFlags)
 
bool GetAccessMaskForRemoval(QualifiedAce ace, ObjectAceFlags objectFlags, Guid objectType, ref int accessMask)
 
bool MergeAces(ref QualifiedAce ace, QualifiedAce newAce)
 
static AF[] CreatePMtoAFConversionMatrix()
 
readonly bool _isCanonical
 
static int SaclAcePriority(GenericAce ace)
 
virtual void OnAclModificationTried()
 
static ComparisonResult CompareAces(GenericAce ace1, GenericAce ace2, bool isDacl)
 
void RemoveInheritedAces()
 
static PM[] CreateAFtoPMConversionMatrix()
 
bool InspectAce(ref GenericAce ace, bool isDacl)
 
static int DaclAcePriority(GenericAce ace)
 
void Canonicalize(bool compact, bool isDacl)
 
override void GetBinaryForm(byte[] binaryForm, int offset)
 
void ThrowIfNotCanonical()
 
void Purge(SecurityIdentifier sid)
 
void CheckAccessType(AccessControlType accessType)
 
static bool AcesAreMergeable(QualifiedAce ace, QualifiedAce newAce)
 
static readonly AF[] s_PMtoAF
 
override int BinaryLength
 
void SetQualifiedAce(SecurityIdentifier sid, AceQualifier qualifier, int accessMask, AceFlags flags, ObjectAceFlags objectFlags, Guid objectType, Guid inheritedObjectType)
 
void QuickSort(int left, int right, bool isDacl)
 
static bool MergeInheritanceBits(AceFlags left, AceFlags right, bool isDS, out AceFlags result)
 
void GetObjectTypesForSplit(ObjectAce originalAce, int accessMask, AceFlags aceFlags, out ObjectAceFlags objectFlags, out Guid objectType, out Guid inheritedObjectType)
 
InheritanceFlags InheritanceFlags
 
SecurityIdentifier SecurityIdentifier
 
Guid InheritedObjectAceType
 
AceQualifier AceQualifier
 
override void GetBinaryForm(byte[] binaryForm, int offset)
 
void InsertAce(int index, GenericAce ace)
 
void SetBinaryForm(byte[] binaryForm, int offset)
 
void RemoveAce(int index)
 
override int BinaryLength
 
override bool Equals([NotNullWhen(true)] object? o)
 
static readonly Guid Empty