RtlAddProcessTrustLabelAce

NTSTATUS __stdcall RtlAddProcessTrustLabelAce(
        _ACL *Acl,
        UINT64 AceRevision,
        UINT64 AceFlags,
        VOID *Sid,
        UINT8 AceType,
        UINT64 AccessMask){
  int v7; 
  unsigned int v8; 
  char v10; 
  unsigned int AclRevision; 
  int v12; 
  char *v13; 
  unsigned __int16 v14; 
  unsigned __int8 v15; 
  NTSTATUS result; 
  VOID *FirstFree; 

  FirstFree = 0i64;
  v7 = AceFlags;
  v8 = AceRevision;
  if( !Acl )
    return -1073741705;
  RtlValidAcl(Acl, (VOID *)AceRevision, (VOID *)AceFlags);
  if( !v10 )
    return -1073741705;
  if( AceType != 20 )
    return -1073741811;
  if( !RtlValidSid(Sid) )
    return -1073741704;
  if( !RtlIsValidProcessTrustLabelSid(Sid) )
    return -1073741811;
  AclRevision = Acl->AclRevision;
  if( (unsigned __int8)AclRevision > 4u || v8 > 4 )
    return -1073741735;
  if( (v7 & 0xFFFFFFE0) != 0 )
    return -1073741811;
  v12 = AccessMask;
  if( (AccessMask & 0xFF000000) != 0 )
    return -1073741811;
  if( !RtlFirstFreeAce(Acl, &FirstFree) )
    return -1073741705;
  v13 = (char *)FirstFree;
  v14 = 4 * (*((unsigned __int8 *)Sid + 1) + 4);
  if( !FirstFree || (char *)FirstFree + v14 > (char *)Acl + Acl->AclSize )
    return -1073741671;
  *((_WORD *)FirstFree + 1) = v14;
  v13[1] = v7;
  *v13 = 20;
  *((_DWORD *)v13 + 1) = v12;
  RtlCopySid(4 * (unsigned int)*((unsigned __int8 *)Sid + 1) + 8, v13 + 8, Sid);
  ++Acl->AceCount;
  v15 = AclRevision;
  if( AclRevision <= v8 )
    v15 = v8;
  result = 0;
  Acl->AclRevision = v15;
  return result;
}

Referenced by:

RtlpNewSecurityObject
SeMakeSystemToken