SepAppendAceToTokenDefaultDacl

NTSTATUS __stdcall SepAppendAceToTokenDefaultDacl(_TOKEN *Token, VOID *InputSid){
  _ACL *DefaultDacl; 
  _ACL *v3; 
  int AclSize; 
  int Acl; 
  unsigned int v8; 
  VOID **PoolWithTag; 
  UINT64 v10; 
  unsigned int v11; 
  UINT64 AceListLength; 
  unsigned int AclInformation; 
  PVOID Ace; 
  __int64 v16; 
  int v17; 

  DefaultDacl = Token->DefaultDacl;
  AclInformation = 0;
  v3 = 0i64;
  Ace = 0i64;
  v16 = 0i64;
  v17 = 0;
  if( !DefaultDacl )
  {
    Acl = 0;
LABEL_12:
    if( v3 )
      ExFreePoolWithTag(v3, 0);
    return Acl;
  }
  if( RtlFindAceBySid(DefaultDacl, InputSid, 0i64) )
    return 0;
  AclSize = DefaultDacl->AclSize;
  Acl = RtlQueryInformationAcl(DefaultDacl, &AclInformation, 4ui64, AclRevisionInformation);
  if( Acl >= 0 )
  {
    Acl = RtlQueryInformationAcl(DefaultDacl, &v16, 0xCui64, AclSizeInformation);
    if( Acl >= 0 )
    {
      v8 = (AclSize + 4 * *((unsigned __int8 *)InputSid + 1) + 19) & 0xFFFFFFFC;
      PoolWithTag = ExAllocatePoolWithTag(1ui64, v8, 1665230163i64);
      v3 = (_ACL *)PoolWithTag;
      if( !PoolWithTag )
        return -1073741670;
      v11 = AclInformation;
      Acl = RtlCreateAcl((PACL)PoolWithTag, (_ACL)v8, AclInformation, v10);
      if( Acl >= 0 )
      {
        Acl = RtlGetAce(DefaultDacl, 0i64, &Ace);
        if( Acl >= 0 )
        {
          LODWORD(AceListLength) = HIDWORD(v16) - 8;
          Acl = RtlAddAce(v3, v11, 0i64, Ace, AceListLength);
          if( Acl >= 0 )
          {
            Acl = RtlAddAccessAllowedAce(v3, v11, 0x10000000, InputSid);
            if( Acl >= 0 )
            {
              Acl = SepExpandDynamic(Token, (v8 + 4 * *((unsigned __int8 *)Token->PrimaryGroup + 1) + 11) & 0xFFFFFFFC);
              if( Acl >= 0 )
              {
                SepFreeDefaultDacl(Token);
                SepAppendDefaultDacl(Token, v3);
              }
            }
          }
        }
      }
      goto LABEL_12;
    }
  }
  return Acl;
}

Referenced by:

NtCreateLowBoxToken