SddlAddMandatoryAce
NTSTATUS __stdcall SddlAddMandatoryAce(
_ACL *Acl,
UINT64 AceRevision,
UINT64 AceFlags,
VOID *Sid,
UINT8 AceType,
UINT64 AccessMask){
int v7;
VOID *v9;
VOID *v10;
NTSTATUS result;
int v12;
unsigned __int8 AclRevision;
char v14;
__int16 v15;
_WORD *v16;
unsigned __int16 v17;
unsigned int v18;
VOID *FirstFree;
int v20;
unsigned __int16 v21;
FirstFree = 0i64;
v20 = 0;
v7 = AceFlags;
v21 = 4096;
if( !Acl )
return -1073741705;
if( !RtlValidSid(Sid) )
return -1073741704;
v12 = *(_DWORD *)((char *)Sid + 2) - v20;
if( !v12 )
v12 = *((unsigned __int16 *)Sid + 3) - v21;
if( v12 )
return -1073741811;
if( Acl->AclRevision > 4u )
return -1073741735;
AclRevision = 2;
if( Acl->AclRevision > 2u )
AclRevision = Acl->AclRevision;
if( (v7 & 0xFFFFFFE0) != 0 || (AccessMask & 0xFFFFFFF8) != 0 )
return -1073741811;
RtlValidAcl(Acl, v9, v10);
if( !v14 || !RtlFirstFreeAce(Acl, &FirstFree) )
return -1073741705;
v15 = RtlLengthSid((INT64)Sid);
v16 = FirstFree;
v17 = v15 + 8;
if( !FirstFree || (char *)FirstFree + v17 > (char *)Acl + Acl->AclSize )
return -1073741671;
*((_BYTE *)FirstFree + 1) = v7;
*(_BYTE *)v16 = 17;
v16[1] = v17;
*((_DWORD *)v16 + 1) = AccessMask;
v18 = RtlLengthSid((INT64)Sid);
RtlCopySid(v18, v16 + 4, Sid);
++Acl->AceCount;
result = 0;
Acl->AclRevision = AclRevision;
return result;
}Referenced by:
LocalGetAclForString