SddlAddMandatoryAce
INT64 __fastcall SddlAddMandatoryAce(
_ACL *Acl,
UINT64 AceRevision,
UINT64 AceFlags,
VOID *Sid,
UINT8 AceType,
UINT64 AccessMask){
int v7;
INT64 result;
int v10;
unsigned __int8 AclRevision;
__int16 v12;
PACE v13;
WORD v14;
ULONG v15;
PACE Ace;
int v17;
unsigned __int16 v18;
Ace = 0i64;
v17 = 0;
v7 = AceFlags;
v18 = 4096;
if( !Acl )
return 3221225591i64;
if( !RtlValidSid(Sid) )
return 3221225592i64;
v10 = *(_DWORD *)((char *)Sid + 2) - v17;
if( !v10 )
v10 = *((unsigned __int16 *)Sid + 3) - v18;
if( v10 )
return 3221225485i64;
if( Acl->AclRevision > 4u )
return 3221225561i64;
AclRevision = 2;
if( Acl->AclRevision > 2u )
AclRevision = Acl->AclRevision;
if( (v7 & 0xFFFFFFE0) != 0 || (AccessMask & 0xFFFFFFF8) != 0 )
return 3221225485i64;
if( !RtlValidAcl(Acl) || !RtlFirstFreeAce(Acl, (VOID **)&Ace) )
return 3221225591i64;
v12 = RtlLengthSid(Sid);
v13 = Ace;
v14 = v12 + 8;
if( !Ace || (char *)Ace + v14 > (char *)Acl + Acl->AclSize )
return 3221225625i64;
Ace->Header.AceFlags = v7;
v13->Header.AceType = 17;
v13->Header.AceSize = v14;
v13->AccessMask = AccessMask;
v15 = RtlLengthSid(Sid);
RtlCopySid(v15, &v13[1], Sid);
++Acl->AceCount;
result = 0i64;
Acl->AclRevision = AclRevision;
return result;
}Referenced by:
LocalGetAclForString