RtlAddMandatoryAce
INT64 __fastcall RtlAddMandatoryAce(
_ACL *Acl,
UINT64 AceRevision,
UINT64 AceFlags,
VOID *Sid,
UINT8 AceType,
UINT64 AccessMask){
int v7;
int v9;
unsigned __int8 AclRevision;
PACE v11;
WORD v12;
INT64 result;
PACE Ace;
int v15;
unsigned __int16 v16;
Ace = 0i64;
v15 = 0;
v7 = AceFlags;
v16 = 4096;
if( !Acl )
return 3221225591i64;
if( !RtlValidSid(Sid) )
return 3221225592i64;
v9 = *(_DWORD *)((char *)Sid + 2) - v15;
if( !v9 )
v9 = *((unsigned __int16 *)Sid + 3) - v16;
if( v9 )
return 3221225485i64;
AclRevision = Acl->AclRevision;
if( Acl->AclRevision > 4u )
return 3221225561i64;
if( AclRevision <= 2u )
AclRevision = 2;
if( (v7 & 0xFFFFFFE0) != 0 || (AccessMask & 0xFFFFFFF8) != 0 )
return 3221225485i64;
if( !RtlValidAcl(Acl) || !RtlFirstFreeAce(Acl, (VOID **)&Ace) )
return 3221225591i64;
v11 = Ace;
v12 = 4 * (*((unsigned __int8 *)Sid + 1) + 4);
if( !Ace || (char *)Ace + v12 > (char *)Acl + Acl->AclSize )
return 3221225625i64;
Ace->Header.AceSize = v12;
v11->Header.AceFlags = v7;
v11->Header.AceType = 17;
v11->AccessMask = AccessMask;
memmove((UINT8 *)&v11[1], (UINT8 *)Sid, 4i64 * *((unsigned __int8 *)Sid + 1) + 8);
++Acl->AceCount;
result = 0i64;
Acl->AclRevision = AclRevision;
return result;
}Referenced by:
CmpGenerateAppHiveSecurityDescriptor
ExpKeyedEventInitialization
IopCreateSecurityDescriptorPerType
ObpVerifyAccessToBoundaryEntry
RtlpNewSecurityObject
SepInitSystemDacls