Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ObjectAce.cs
Go to the documentation of this file.
3
5
6public sealed class ObjectAce : QualifiedAce
7{
9
11
13
15 {
16 get
17 {
18 return _objectFlags;
19 }
20 set
21 {
23 }
24 }
25
27 {
28 get
29 {
30 return _objectAceType;
31 }
32 set
33 {
35 }
36 }
37
39 {
40 get
41 {
43 }
44 set
45 {
47 }
48 }
49
50 public override int BinaryLength
51 {
52 get
53 {
54 int num = (((_objectFlags & ObjectAceFlags.ObjectAceTypePresent) != 0) ? 16 : 0) + (((_objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != 0) ? 16 : 0);
55 return 12 + num + base.SecurityIdentifier.BinaryLength + base.OpaqueLength;
56 }
57 }
58
59 internal override int MaxOpaqueLengthInternal => MaxOpaqueLength(base.IsCallback);
60
61 public ObjectAce(AceFlags aceFlags, AceQualifier qualifier, int accessMask, SecurityIdentifier sid, ObjectAceFlags flags, Guid type, Guid inheritedType, bool isCallback, byte[]? opaque)
62 : base(TypeFromQualifier(isCallback, qualifier), aceFlags, accessMask, sid, opaque)
63 {
64 _objectFlags = flags;
66 _inheritedObjectAceType = inheritedType;
67 }
68
69 private static AceType TypeFromQualifier(bool isCallback, AceQualifier qualifier)
70 {
71 return qualifier switch
72 {
73 AceQualifier.AccessAllowed => isCallback ? AceType.AccessAllowedCallbackObject : AceType.AccessAllowedObject,
74 AceQualifier.AccessDenied => isCallback ? AceType.AccessDeniedCallbackObject : AceType.AccessDeniedObject,
75 AceQualifier.SystemAudit => isCallback ? AceType.SystemAuditCallbackObject : AceType.SystemAuditObject,
76 AceQualifier.SystemAlarm => isCallback ? AceType.SystemAlarmCallbackObject : AceType.SystemAlarmObject,
78 };
79 }
80
81 internal bool ObjectTypesMatch(ObjectAceFlags objectFlags, Guid objectType)
82 {
83 if ((ObjectAceFlags & ObjectAceFlags.ObjectAceTypePresent) != (objectFlags & ObjectAceFlags.ObjectAceTypePresent))
84 {
85 return false;
86 }
87 if ((ObjectAceFlags & ObjectAceFlags.ObjectAceTypePresent) != 0 && !ObjectAceType.Equals(objectType))
88 {
89 return false;
90 }
91 return true;
92 }
93
94 internal bool InheritedObjectTypesMatch(ObjectAceFlags objectFlags, Guid inheritedObjectType)
95 {
96 if ((ObjectAceFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != (objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent))
97 {
98 return false;
99 }
100 if ((ObjectAceFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != 0 && !InheritedObjectAceType.Equals(inheritedObjectType))
101 {
102 return false;
103 }
104 return true;
105 }
106
107 internal static bool ParseBinaryForm(byte[] binaryForm, int offset, out AceQualifier qualifier, out int accessMask, [NotNullWhen(true)] out SecurityIdentifier sid, out ObjectAceFlags objectFlags, out Guid objectAceType, out Guid inheritedObjectAceType, out bool isCallback, out byte[] opaque)
108 {
109 byte[] array = new byte[16];
110 GenericAce.VerifyHeader(binaryForm, offset);
111 if (binaryForm.Length - offset >= 12 + System.Security.Principal.SecurityIdentifier.MinBinaryLength)
112 {
113 AceType aceType = (AceType)binaryForm[offset];
114 if (aceType == AceType.AccessAllowedObject || aceType == AceType.AccessDeniedObject || aceType == AceType.SystemAuditObject || aceType == AceType.SystemAlarmObject)
115 {
116 isCallback = false;
117 }
118 else
119 {
120 if (aceType != AceType.AccessAllowedCallbackObject && aceType != AceType.AccessDeniedCallbackObject && aceType != AceType.SystemAuditCallbackObject && aceType != AceType.SystemAlarmCallbackObject)
121 {
122 goto IL_0209;
123 }
124 isCallback = true;
125 }
126 if (aceType == AceType.AccessAllowedObject || aceType == AceType.AccessAllowedCallbackObject)
127 {
128 qualifier = AceQualifier.AccessAllowed;
129 }
130 else if (aceType == AceType.AccessDeniedObject || aceType == AceType.AccessDeniedCallbackObject)
131 {
132 qualifier = AceQualifier.AccessDenied;
133 }
134 else if (aceType == AceType.SystemAuditObject || aceType == AceType.SystemAuditCallbackObject)
135 {
136 qualifier = AceQualifier.SystemAudit;
137 }
138 else
139 {
140 if (aceType != AceType.SystemAlarmObject && aceType != AceType.SystemAlarmCallbackObject)
141 {
142 goto IL_0209;
143 }
144 qualifier = AceQualifier.SystemAlarm;
145 }
146 int num = offset + 4;
147 int num2 = 0;
148 accessMask = binaryForm[num] + (binaryForm[num + 1] << 8) + (binaryForm[num + 2] << 16) + (binaryForm[num + 3] << 24);
149 num2 += 4;
150 objectFlags = (ObjectAceFlags)(binaryForm[num + num2] + (binaryForm[num + num2 + 1] << 8) + (binaryForm[num + num2 + 2] << 16) + (binaryForm[num + num2 + 3] << 24));
151 num2 += 4;
152 if ((objectFlags & ObjectAceFlags.ObjectAceTypePresent) != 0)
153 {
154 for (int i = 0; i < 16; i++)
155 {
156 array[i] = binaryForm[num + num2 + i];
157 }
158 num2 += 16;
159 }
160 else
161 {
162 for (int j = 0; j < 16; j++)
163 {
164 array[j] = 0;
165 }
166 }
167 objectAceType = new Guid(array);
168 if ((objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != 0)
169 {
170 for (int k = 0; k < 16; k++)
171 {
172 array[k] = binaryForm[num + num2 + k];
173 }
174 num2 += 16;
175 }
176 else
177 {
178 for (int l = 0; l < 16; l++)
179 {
180 array[l] = 0;
181 }
182 }
183 inheritedObjectAceType = new Guid(array);
184 sid = new SecurityIdentifier(binaryForm, num + num2);
185 opaque = null;
186 int num3 = (binaryForm[offset + 3] << 8) + binaryForm[offset + 2];
187 if (num3 % 4 == 0)
188 {
189 int num4 = num3 - 4 - 4 - 4 - (byte)sid.BinaryLength;
190 if ((objectFlags & ObjectAceFlags.ObjectAceTypePresent) != 0)
191 {
192 num4 -= 16;
193 }
194 if ((objectFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != 0)
195 {
196 num4 -= 16;
197 }
198 if (num4 > 0)
199 {
200 opaque = new byte[num4];
201 for (int m = 0; m < num4; m++)
202 {
203 opaque[m] = binaryForm[offset + num3 - num4 + m];
204 }
205 }
206 return true;
207 }
208 }
209 goto IL_0209;
210 IL_0209:
211 qualifier = AceQualifier.AccessAllowed;
212 accessMask = 0;
213 sid = null;
214 objectFlags = ObjectAceFlags.None;
215 objectAceType = Guid.NewGuid();
216 inheritedObjectAceType = Guid.NewGuid();
217 isCallback = false;
218 opaque = null;
219 return false;
220 }
221
222 public static int MaxOpaqueLength(bool isCallback)
223 {
225 }
226
227 public override void GetBinaryForm(byte[] binaryForm, int offset)
228 {
229 MarshalHeader(binaryForm, offset);
230 int num = offset + 4;
231 int num2 = 0;
232 binaryForm[num] = (byte)base.AccessMask;
233 binaryForm[num + 1] = (byte)(base.AccessMask >> 8);
234 binaryForm[num + 2] = (byte)(base.AccessMask >> 16);
235 binaryForm[num + 3] = (byte)(base.AccessMask >> 24);
236 num2 += 4;
237 binaryForm[num + num2] = (byte)ObjectAceFlags;
238 binaryForm[num + num2 + 1] = (byte)((uint)ObjectAceFlags >> 8);
239 binaryForm[num + num2 + 2] = (byte)((uint)ObjectAceFlags >> 16);
240 binaryForm[num + num2 + 3] = (byte)((uint)ObjectAceFlags >> 24);
241 num2 += 4;
242 if ((ObjectAceFlags & ObjectAceFlags.ObjectAceTypePresent) != 0)
243 {
244 ObjectAceType.ToByteArray().CopyTo(binaryForm, num + num2);
245 num2 += 16;
246 }
247 if ((ObjectAceFlags & ObjectAceFlags.InheritedObjectAceTypePresent) != 0)
248 {
249 InheritedObjectAceType.ToByteArray().CopyTo(binaryForm, num + num2);
250 num2 += 16;
251 }
252 base.SecurityIdentifier.GetBinaryForm(binaryForm, num + num2);
253 num2 += base.SecurityIdentifier.BinaryLength;
254 if (GetOpaque() != null)
255 {
256 if (base.OpaqueLength > MaxOpaqueLengthInternal)
257 {
258 throw new InvalidOperationException();
259 }
260 GetOpaque().CopyTo(binaryForm, num + num2);
261 }
262 }
263}
static string ArgumentOutOfRange_Enum
Definition SR.cs:18
Definition SR.cs:7
static void VerifyHeader(byte[] binaryForm, int offset)
void MarshalHeader(byte[] binaryForm, int offset)
Definition GenericAce.cs:82
SecurityIdentifier SecurityIdentifier
Definition KnownAce.cs:25
static int MaxOpaqueLength(bool isCallback)
Definition ObjectAce.cs:222
bool InheritedObjectTypesMatch(ObjectAceFlags objectFlags, Guid inheritedObjectType)
Definition ObjectAce.cs:94
ObjectAce(AceFlags aceFlags, AceQualifier qualifier, int accessMask, SecurityIdentifier sid, ObjectAceFlags flags, Guid type, Guid inheritedType, bool isCallback, byte[]? opaque)
Definition ObjectAce.cs:61
bool ObjectTypesMatch(ObjectAceFlags objectFlags, Guid objectType)
Definition ObjectAce.cs:81
static bool ParseBinaryForm(byte[] binaryForm, int offset, out AceQualifier qualifier, out int accessMask, [NotNullWhen(true)] out SecurityIdentifier sid, out ObjectAceFlags objectFlags, out Guid objectAceType, out Guid inheritedObjectAceType, out bool isCallback, out byte[] opaque)
Definition ObjectAce.cs:107
static AceType TypeFromQualifier(bool isCallback, AceQualifier qualifier)
Definition ObjectAce.cs:69
override void GetBinaryForm(byte[] binaryForm, int offset)
Definition ObjectAce.cs:227
byte[] ToByteArray()
Definition Guid.cs:681
override bool Equals([NotNullWhen(true)] object? o)
Definition Guid.cs:706
static Guid NewGuid()
Definition Guid.cs:1283