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

◆ ParseBinaryForm()

static bool System.Security.AccessControl.ObjectAce.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 )
inlinestaticpackage

Definition at line 107 of file ObjectAce.cs.

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 }
GenericAce(AceType type, AceFlags flags)
SecurityIdentifier SecurityIdentifier
Definition KnownAce.cs:25

References System.array, System.Security.Principal.SecurityIdentifier.MinBinaryLength, System.Guid.NewGuid(), System.Security.AccessControl.ObjectAce.ObjectAceFlags, System.offset, System.Security.AccessControl.KnownAce.SecurityIdentifier, and System.Security.AccessControl.GenericAce.VerifyHeader().

Referenced by System.Security.AccessControl.GenericAce.CreateFromBinaryForm().