35 {
37 try
38 {
39 AuthorizationRuleCollection authorizationRuleCollection = new AuthorizationRuleCollection();
41 {
43 }
44 CommonAcl commonAcl = null;
45 if (access)
46 {
47 if ((base.SecurityDescriptor.ControlFlags & ControlFlags.DiscretionaryAclPresent) != 0)
48 {
49 commonAcl = base.SecurityDescriptor.DiscretionaryAcl;
50 }
51 }
52 else if ((base.SecurityDescriptor.ControlFlags & ControlFlags.SystemAclPresent) != 0)
53 {
54 commonAcl = base.SecurityDescriptor.SystemAcl;
55 }
56 if (commonAcl == null)
57 {
58 return authorizationRuleCollection;
59 }
62 {
64 for (
int i = 0;
i < commonAcl.Count;
i++)
65 {
66 QualifiedAce qualifiedAce = commonAcl[
i] as QualifiedAce;
67 if (qualifiedAce == null || qualifiedAce.IsCallback)
68 {
69 continue;
70 }
71 if (access)
72 {
73 if (qualifiedAce.AceQualifier != 0 && qualifiedAce.AceQualifier !=
AceQualifier.AccessDenied)
74 {
75 continue;
76 }
77 }
78 else if (qualifiedAce.AceQualifier !=
AceQualifier.SystemAudit)
79 {
80 continue;
81 }
82 identityReferenceCollection2.
Add(qualifiedAce.SecurityIdentifier);
83 }
84 identityReferenceCollection = identityReferenceCollection2.
Translate(targetType);
85 }
86 for (int j = 0; j < commonAcl.Count; j++)
87 {
88 QualifiedAce qualifiedAce2 = commonAcl[j] as CommonAce;
89 if (qualifiedAce2 == null)
90 {
91 qualifiedAce2 = commonAcl[j] as ObjectAce;
92 if (qualifiedAce2 == null)
93 {
94 continue;
95 }
96 }
97 if (qualifiedAce2.IsCallback)
98 {
99 continue;
100 }
101 if (access)
102 {
103 if (qualifiedAce2.AceQualifier != 0 && qualifiedAce2.AceQualifier !=
AceQualifier.AccessDenied)
104 {
105 continue;
106 }
107 }
108 else if (qualifiedAce2.AceQualifier !=
AceQualifier.SystemAudit)
109 {
110 continue;
111 }
112 if ((!includeExplicit || (qualifiedAce2.AceFlags & AceFlags.Inherited) != 0) && (!includeInherited || (qualifiedAce2.AceFlags & AceFlags.Inherited) == 0))
113 {
114 continue;
115 }
117 if (access)
118 {
120 if (qualifiedAce2 is ObjectAce objectAce)
121 {
122 authorizationRuleCollection.AddRule(
AccessRuleFactory(identityReference, objectAce.AccessMask, objectAce.IsInherited, objectAce.InheritanceFlags, objectAce.PropagationFlags,
type, objectAce.ObjectAceType, objectAce.InheritedObjectAceType));
123 continue;
124 }
125 CommonAce commonAce = qualifiedAce2 as CommonAce;
126 if (!(commonAce == null))
127 {
128 authorizationRuleCollection.AddRule(
AccessRuleFactory(identityReference, commonAce.AccessMask, commonAce.IsInherited, commonAce.InheritanceFlags, commonAce.PropagationFlags,
type));
129 }
130 }
131 else if (qualifiedAce2 is ObjectAce objectAce2)
132 {
133 authorizationRuleCollection.AddRule(
AuditRuleFactory(identityReference, objectAce2.AccessMask, objectAce2.IsInherited, objectAce2.InheritanceFlags, objectAce2.PropagationFlags, objectAce2.AuditFlags, objectAce2.ObjectAceType, objectAce2.InheritedObjectAceType));
134 }
135 else
136 {
137 CommonAce commonAce2 = qualifiedAce2 as CommonAce;
138 if (!(commonAce2 == null))
139 {
140 authorizationRuleCollection.AddRule(
AuditRuleFactory(identityReference, commonAce2.AccessMask, commonAce2.IsInherited, commonAce2.InheritanceFlags, commonAce2.PropagationFlags, commonAce2.AuditFlags));
141 }
142 }
143 }
144 return authorizationRuleCollection;
145 }
146 finally
147 {
149 }
150 }
static string Arg_MustBeIdentityReferenceType
virtual AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags, Guid objectType, Guid inheritedObjectType)
static bool IsValidTargetTypeStatic(Type targetType)
virtual AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type, Guid objectType, Guid inheritedObjectType)
void Add(IdentityReference identity)
IdentityReferenceCollection Translate(Type targetType)