RtlpMuiRegValidateConfigNode

INT64 __fastcall RtlpMuiRegValidateConfigNode(UINT64 a1, INT64 a2){
  unsigned int v3; 
  INT16 v5; 
  int InstalledLanguageIndex; 
  __int64 v7; 
  __int16 v8; 
  __int16 v9; 
  unsigned __int8 v10; 
  __int16 v11; 
  __int16 v12; 
  __int16 v13; 
  char v14; 
  unsigned __int16 v15; 
  __int64 v17[11]; 
  __int16 v19; 
  unsigned __int16 v20; 
  __int16 i; 
  v3 = *(unsigned __int16 *)(a2 + 2);
  v19 = 0;
  v5 = *(_WORD *)a2;
  v20 = -1;
  InstalledLanguageIndex = RtlpMuiRegGetInstalledLanguageIndex(a1, v3 >> 14, v5, &v19);
  if( InstalledLanguageIndex >= 0 )
  {
    v7 = *(_QWORD *)(*(_QWORD *)(a1 + 24) + 16i64) + 28i64 * v19;
    if( (*(_WORD *)v7 & 0x1000) != 0 )
    {
      return(unsigned int)-1073741772;
    }
    else
    {
      v8 = 0;
      v9 = 0;
      while( 1 )
      {
        v10 = (*(_WORD *)(a2 + 2) >> v9) & 3;
        if( !v10 )
          break;
        if( !v7 )
          return(unsigned int)-1073741772;
        v11 = 0;
        v12 = 0;
        v13 = *(_WORD *)(a2 + 2i64 * v8 + 6);
        for( i = v13; ; v13 = i )
        {
          v14 = (*(_WORD *)(v7 + 8) >> v12) & 3;
          v17[0] = 0i64;
          if( RtlpMuiRegConfigMatchesInstalled(a1, v10, v13, v14, *(_WORD *)(v7 + 2i64 * v11 + 12), v17, &v20) )
          {
            if( (!v17[0] || (*(_WORD *)v17[0] & 0x1000) == 0) && ((*(_BYTE *)v7 & 4) == 0 || v17[0]) )
              break;
          }
          ++v11;
          v12 += 2;
          if( v12 >= 8 )
            return(unsigned int)-1073741772;
        }
        v15 = v20;
        v7 = v17[0];
        if( v20 != 0xFFFF )
        {
          *(_WORD *)(a2 + 2) = (2 << (2 * v8)) | *(_WORD *)(a2 + 2) & ~(3 << (2 * v8));
          *(_WORD *)(a2 + 2i64 * v8 + 6) = v15;
        }
        ++v8;
        v9 += 2;
        if( v9 >= 6 )
          return(unsigned int)InstalledLanguageIndex;
      }
      if( !v8 )
        return(unsigned int)-1073741823;
    }
  }
  return(unsigned int)InstalledLanguageIndex;
}

Referenced by:

RtlpPopulateLanguageConfigList