Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CommonAce.cs
Go to the documentation of this file.
3
5
6public sealed class CommonAce : QualifiedAce
7{
8 public override int BinaryLength => 8 + base.SecurityIdentifier.BinaryLength + base.OpaqueLength;
9
10 internal override int MaxOpaqueLengthInternal => MaxOpaqueLength(base.IsCallback);
11
12 public CommonAce(AceFlags flags, AceQualifier qualifier, int accessMask, SecurityIdentifier sid, bool isCallback, byte[]? opaque)
13 : base(TypeFromQualifier(isCallback, qualifier), flags, accessMask, sid, opaque)
14 {
15 }
16
17 private static AceType TypeFromQualifier(bool isCallback, AceQualifier qualifier)
18 {
19 return qualifier switch
20 {
21 AceQualifier.AccessAllowed => isCallback ? AceType.AccessAllowedCallback : AceType.AccessAllowed,
22 AceQualifier.AccessDenied => (!isCallback) ? AceType.AccessDenied : AceType.AccessDeniedCallback,
23 AceQualifier.SystemAudit => isCallback ? AceType.SystemAuditCallback : AceType.SystemAudit,
24 AceQualifier.SystemAlarm => isCallback ? AceType.SystemAlarmCallback : AceType.SystemAlarm,
26 };
27 }
28
29 internal static bool ParseBinaryForm(byte[] binaryForm, int offset, out AceQualifier qualifier, out int accessMask, [NotNullWhen(true)] out SecurityIdentifier sid, out bool isCallback, out byte[] opaque)
30 {
31 GenericAce.VerifyHeader(binaryForm, offset);
33 {
34 AceType aceType = (AceType)binaryForm[offset];
35 if (aceType == AceType.AccessAllowed || aceType == AceType.AccessDenied || aceType == AceType.SystemAudit || aceType == AceType.SystemAlarm)
36 {
37 isCallback = false;
38 }
39 else
40 {
41 if (aceType != AceType.AccessAllowedCallback && aceType != AceType.AccessDeniedCallback && aceType != AceType.SystemAuditCallback && aceType != AceType.SystemAlarmCallback)
42 {
43 goto IL_0114;
44 }
45 isCallback = true;
46 }
47 if (aceType == AceType.AccessAllowed || aceType == AceType.AccessAllowedCallback)
48 {
49 qualifier = AceQualifier.AccessAllowed;
50 }
51 else if (aceType == AceType.AccessDenied || aceType == AceType.AccessDeniedCallback)
52 {
53 qualifier = AceQualifier.AccessDenied;
54 }
55 else if (aceType == AceType.SystemAudit || aceType == AceType.SystemAuditCallback)
56 {
57 qualifier = AceQualifier.SystemAudit;
58 }
59 else
60 {
61 if (aceType != AceType.SystemAlarm && aceType != AceType.SystemAlarmCallback)
62 {
63 goto IL_0114;
64 }
65 qualifier = AceQualifier.SystemAlarm;
66 }
67 int num = offset + 4;
68 int num2 = 0;
69 accessMask = binaryForm[num] + (binaryForm[num + 1] << 8) + (binaryForm[num + 2] << 16) + (binaryForm[num + 3] << 24);
70 num2 += 4;
71 sid = new SecurityIdentifier(binaryForm, num + num2);
72 opaque = null;
73 int num3 = (binaryForm[offset + 3] << 8) + binaryForm[offset + 2];
74 if (num3 % 4 == 0)
75 {
76 int num4 = num3 - 4 - 4 - (byte)sid.BinaryLength;
77 if (num4 > 0)
78 {
79 opaque = new byte[num4];
80 for (int i = 0; i < num4; i++)
81 {
82 opaque[i] = binaryForm[offset + num3 - num4 + i];
83 }
84 }
85 return true;
86 }
87 }
88 goto IL_0114;
89 IL_0114:
90 qualifier = AceQualifier.AccessAllowed;
91 accessMask = 0;
92 sid = null;
93 isCallback = false;
94 opaque = null;
95 return false;
96 }
97
98 public static int MaxOpaqueLength(bool isCallback)
99 {
101 }
102
103 public override void GetBinaryForm(byte[] binaryForm, int offset)
104 {
105 MarshalHeader(binaryForm, offset);
106 int num = offset + 4;
107 int num2 = 0;
108 binaryForm[num] = (byte)base.AccessMask;
109 binaryForm[num + 1] = (byte)(base.AccessMask >> 8);
110 binaryForm[num + 2] = (byte)(base.AccessMask >> 16);
111 binaryForm[num + 3] = (byte)(base.AccessMask >> 24);
112 num2 += 4;
113 base.SecurityIdentifier.GetBinaryForm(binaryForm, num + num2);
114 num2 += base.SecurityIdentifier.BinaryLength;
115 if (GetOpaque() != null)
116 {
117 if (base.OpaqueLength > MaxOpaqueLengthInternal)
118 {
119 throw new InvalidOperationException();
120 }
121 GetOpaque().CopyTo(binaryForm, num + num2);
122 }
123 }
124}
static string ArgumentOutOfRange_Enum
Definition SR.cs:18
Definition SR.cs:7
static bool ParseBinaryForm(byte[] binaryForm, int offset, out AceQualifier qualifier, out int accessMask, [NotNullWhen(true)] out SecurityIdentifier sid, out bool isCallback, out byte[] opaque)
Definition CommonAce.cs:29
override void GetBinaryForm(byte[] binaryForm, int offset)
Definition CommonAce.cs:103
static int MaxOpaqueLength(bool isCallback)
Definition CommonAce.cs:98
CommonAce(AceFlags flags, AceQualifier qualifier, int accessMask, SecurityIdentifier sid, bool isCallback, byte[]? opaque)
Definition CommonAce.cs:12
static AceType TypeFromQualifier(bool isCallback, AceQualifier qualifier)
Definition CommonAce.cs:17
static void VerifyHeader(byte[] binaryForm, int offset)
void MarshalHeader(byte[] binaryForm, int offset)
Definition GenericAce.cs:82
SecurityIdentifier SecurityIdentifier
Definition KnownAce.cs:25