RtlpMuiRegValidatePartialLanguage

__int64 __fastcall RtlpMuiRegValidatePartialLanguage(__int64 a1, int a2){
  __int64 v3; 
  int v4; 
  char v5; 
  _WORD *v6; 
  int v7; 
  INT16 *v8; 
  unsigned __int16 v9; 
  unsigned __int8 v10; 
  INT64 v11; 
  __int64 v12; 
  INT16 v13; 
  INT16 ResultIndexRtrn; 

  v3 = a1;
  v4 = 0;
  v5 = 0;
  v6 = (_WORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 16i64) + 28i64 * a2);
  v7 = 0;
  v8 = v6 + 6;
  do
  {
    v9 = v6[4];
    v10 = (v9 >> (2 * v5)) & 3;
    if( v10 )
    {
      v11 = (unsigned int)*v8;
      if( v10 == 2 )
      {
        if( (_DWORD)v11 == a2 )
          v6[4] = v9 & ~(3 << v7);
        else
          ++v4;
      }
      else
      {
        v12 = *(_QWORD *)(v3 + 24);
        ResultIndexRtrn = -1;
        if( RtlpMuiRegGetInstalledLangInfoIndex((_MUILANGUAGES *)v12, v10, v11, &ResultIndexRtrn) < 0 )
        {
          ++v4;
        }
        else
        {
          v13 = ResultIndexRtrn;
          if( ResultIndexRtrn >= 0 && ResultIndexRtrn < (int)*(unsigned __int16 *)(v12 + 6) && ResultIndexRtrn != a2 )
          {
            ++v4;
            if( (*(_BYTE *)(28i64 * ResultIndexRtrn + *(_QWORD *)(v12 + 16)) & 1) != 0 )
            {
              v6[4] = (2 << v7) | v9 & ~(3 << v7);
              *v8 = v13;
            }
          }
        }
        v3 = a1;
      }
    }
    ++v5;
    ++v8;
    v7 += 2;
  }
  while( v7 < 8 );
  if( v4 >= 1 )
    return 0i64;
  *v6 |= 0x1000u;
  return 3221225473i64;
}

Referenced by:

RtlpMuiRegValidateInstalled