ApiSetValidateSchemaFormat

INT64 __fastcall ApiSetValidateSchemaFormat(_DWORD *a1, UINT64 a2){
  unsigned int v4; 
  __int64 v5; 
  unsigned int v6; 
  unsigned int v7; 
  __int64 v8; 
  __int64 v9; 
  CHAR *v10; 
  unsigned int v11; 
  __int64 v12; 
  unsigned int v13; 
  unsigned int v14; 
  __int64 v15; 
  int v16; 
  __int64 i; 
  _DWORD *v18; 
  unsigned int v19; 
  unsigned int v20; 
  unsigned int v21; 
  unsigned int v22; 
  unsigned int v23; 
  int v24; 
  unsigned int v25; 
  if( *a1 > 4u )
  {
    if( (unsigned int)a2 >= 0x1C )
    {
      v4 = a1[1];
      if( v4 <= (unsigned int)a2 )
      {
        v5 = (unsigned int)a1[3];
        v6 = 24 * v5;
        if( (unsigned __int64)(24 * v5) > 0xFFFFFFFF )
          return(unsigned int)-1073741675;
        v7 = v6 + 28;
        if( v6 >= 0xFFFFFFE4 )
          return(unsigned int)-1073741675;
        if( v7 <= v4 )
        {
          v8 = 0i64;
          if( (_DWORD)v5 )
          {
            v9 = (unsigned int)a1[4];
            do
            {
              v10 = (char *)&a1[6 * v8] + v9;
              v11 = *((_DWORD *)v10 + 2);
              if( v11 > 0xFFFF )
                return(unsigned int)-1073741596;
              if( *((_DWORD *)v10 + 3) > 0xFFFFu )
                return(unsigned int)-1073741596;
              v12 = *((unsigned int *)v10 + 1);
              if( (_DWORD)v12 )
              {
                if( (unsigned int)v12 < v7 )
                  return(unsigned int)-1073741596;
              }
              v13 = v12 + v11;
              if( v13 < (unsigned int)v12 )
                return(unsigned int)-1073741675;
              if( v13 > v4 )
                return(unsigned int)-1073741596;
              if( ApiSetpSearchForApiSet(a1, (WCHAR *)((char *)a1 + v12), *((_WORD *)v10 + 6) >> 1) != v10 )
                return(unsigned int)-1073741596;
              v14 = *((_DWORD *)v10 + 4);
              if( v14 )
              {
                if( v14 < v7 )
                  return(unsigned int)-1073741596;
              }
              v15 = *((unsigned int *)v10 + 5);
              v16 = 20 * v15;
              if( (unsigned __int64)(20 * v15) > 0xFFFFFFFF || v14 + v16 < v14 )
                return(unsigned int)-1073741675;
              if( v14 + v16 > v4 )
                return(unsigned int)-1073741596;
              for( i = 0i64; (unsigned int)i < (unsigned int)v15; i = (unsigned int)(i + 1) )
              {
                v18 = (_DWORD *)((char *)&a1[5 * i] + *((unsigned int *)v10 + 4));
                v19 = v18[2];
                if( v19 > 0xFFFF )
                  return(unsigned int)-1073741596;
                v20 = v18[4];
                if( v20 > 0xFFFF )
                  return(unsigned int)-1073741596;
                v21 = v18[1];
                if( v21 )
                {
                  if( v21 < v7 )
                    return(unsigned int)-1073741596;
                }
                v22 = v21 + v19;
                if( v22 < v21 )
                  return(unsigned int)-1073741675;
                if( v22 > v4 )
                  return(unsigned int)-1073741596;
                v23 = v18[3];
                if( v23 )
                {
                  if( v23 < v7 )
                    return(unsigned int)-1073741596;
                }
                if( v20 + v23 < v23 )
                  return(unsigned int)-1073741675;
                if( v20 + v23 > v4 )
                  return(unsigned int)-1073741596;
              }
              v8 = (unsigned int)(v8 + 1);
            }
            while( (unsigned int)v8 < (unsigned int)v5 );
          }
          v24 = 8 * v5;
          if( (unsigned __int64)(8 * v5) <= 0xFFFFFFFF )
          {
            v25 = a1[5];
            if( v25 + v24 >= v25 )
              return v4 < v25 + v24 ? 0xC00000E4 : 0;
          }
          return(unsigned int)-1073741675;
        }
      }
    }
    return(unsigned int)-1073741596;
  }
  return(unsigned int)-1073741637;
}

Referenced by:

ApiSetComposeSchema