Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetRules()

AuthorizationRuleCollection System.Security.AccessControl.DirectoryObjectSecurity.GetRules ( bool access,
bool includeExplicit,
bool includeInherited,
Type targetType )
inlineprivate

Definition at line 34 of file DirectoryObjectSecurity.cs.

35 {
36 ReadLock();
37 try
38 {
39 AuthorizationRuleCollection authorizationRuleCollection = new AuthorizationRuleCollection();
40 if (!IsValidTargetTypeStatic(targetType))
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 }
60 IdentityReferenceCollection identityReferenceCollection = null;
61 if (targetType != typeof(SecurityIdentifier))
62 {
63 IdentityReferenceCollection identityReferenceCollection2 = new IdentityReferenceCollection(commonAcl.Count);
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 }
116 IdentityReference identityReference = ((targetType == typeof(SecurityIdentifier)) ? qualifiedAce2.SecurityIdentifier : identityReferenceCollection[j]);
117 if (access)
118 {
119 AccessControlType type = ((qualifiedAce2.AceQualifier != 0) ? AccessControlType.Deny : AccessControlType.Allow);
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 {
148 ReadUnlock();
149 }
150 }
static string Arg_MustBeIdentityReferenceType
Definition SR.cs:16
Definition SR.cs:7
virtual AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags, Guid objectType, Guid inheritedObjectType)
virtual AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type, Guid objectType, Guid inheritedObjectType)
IdentityReferenceCollection Translate(Type targetType)

References System.Security.AccessControl.KnownAce.AccessMask, System.Security.AccessControl.DirectoryObjectSecurity.AccessRuleFactory(), System.Security.AccessControl.GenericAce.AceFlags, System.Security.AccessControl.QualifiedAce.AceQualifier, System.Security.Principal.IdentityReferenceCollection.Add(), System.Security.AccessControl.AuthorizationRuleCollection.AddRule(), System.SR.Arg_MustBeIdentityReferenceType, System.Security.AccessControl.GenericAce.AuditFlags, System.Security.AccessControl.DirectoryObjectSecurity.AuditRuleFactory(), System.Security.AccessControl.CommonAcl.Count, System.Security.AccessControl.GenericAce.InheritanceFlags, System.Security.AccessControl.QualifiedAce.IsCallback, System.Security.AccessControl.GenericAce.IsInherited, System.Security.AccessControl.DirectoryObjectSecurity.IsValidTargetTypeStatic(), System.Security.AccessControl.GenericAce.PropagationFlags, System.Security.AccessControl.ObjectSecurity< T >.ReadLock(), System.Security.AccessControl.ObjectSecurity< T >.ReadUnlock(), System.Security.AccessControl.KnownAce.SecurityIdentifier, System.Security.Principal.IdentityReferenceCollection.Translate(), and System.type.

Referenced by System.Security.AccessControl.DirectoryObjectSecurity.GetAccessRules(), and System.Security.AccessControl.DirectoryObjectSecurity.GetAuditRules().