RtlpMuiRegLoadInstalledFromKey

__int64 __fastcall RtlpMuiRegLoadInstalledFromKey(__int64 a1, const WCHAR *a2, WCHAR a3){
  unsigned int *v3; 
  unsigned int v5; 
  UINT64 v6; 
  NTSTATUS v7; 
  WCHAR v8; 
  unsigned __int64 v9; 
  UINT64 v10; 
  WCHAR v11; 
  VOID *v12; 
  __int16 v13; 
  unsigned int v14; 
  char v15; 
  void *v16; 
  void *v17; 
  UINT64 Length; 
  _LARGE_INTEGER *ResultLength; 
  int v21; 
  v3 = (unsigned int *)((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64);
  v3[6] = 0;
  *((_QWORD *)v3 + 1) = 0i64;
  *v3 = 0;
  v5 = 0;
  *((_WORD *)v3 + 2) = -1;
  *(_OWORD *)(v3 + 10) = 0i64;
  *((_QWORD *)v3 + 2) = 0i64;
  RtlInitUnicodeString((PUNICODE_STRING)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 40), a2, a3);
  if( (int)LdrpOpenKey((_UNICODE_STRING *)(v3 + 10), 0i64, v6, (VOID **)v3 + 2) < 0 )
    return 0i64;
  do
  {
    LODWORD(Length) = 512;
    v7 = ZwEnumerateKey(
           *(VOID **)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10),
           v5,
           KeyBasicInformation,
           v3 + 16,
           Length,
           (UINT64 *)v3 + 3);
    if( v7 < 0 )
    {
      if( v7 != -2147483622 )
        goto LABEL_19;
    }
    else
    {
      v9 = *(unsigned int *)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 0x4C);
      if( v9 + 24 <= 0x200 )
      {
        *(_WORD *)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 2 * (v9 >> 1) + 0x50) = 0;
        RtlInitUnicodeString((PUNICODE_STRING)(v3 + 10), (PCWSTR)v3 + 40, v8);
        if( (int)LdrpOpenKey(
                    (_UNICODE_STRING *)(v3 + 10),
                    *(VOID **)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10),
                    v10,
                    (VOID **)v3 + 1) >= 0 )
        {
          RtlInitUnicodeString((PUNICODE_STRING)(v3 + 10), L"Type", v11);
          v12 = *(VOID **)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 8);
          *(_DWORD *)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 0x20) = 4;
          *(_DWORD *)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 0x1C) = 4;
          if( (int)LdrpQueryValueKey(
                      v12,
                      (_UNICODE_STRING *)(v3 + 10),
                      (UINT64 *)v3 + 4,
                      (VOID *)((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64),
                      (UINT64 *)(v3 + 7),
                      ResultLength) >= 0
            && (int)ValidateRegistrLangType(*v3) >= 0 )
          {
            v14 = v13 & 0x419F;
            *v3 = v14;
            if( (v14 & 7) != 0 && (v14 & 7 & -(v14 & 7)) == (v14 & 7) )
            {
              if( (v14 & 0x180) == 0 || (v15 = v14, (v14 & 0x180 & -(v14 & 0x180)) != (v14 & 0x180)) )
              {
                v14 = v14 & 0xFFFFFE7F | 0x80;
                *v3 = v14;
                v15 = v14;
              }
              if( (v15 & 0x18) != 0
                && (v15 & 0x18 & -(v15 & 0x18)) == (v15 & 0x18)
                && ((v15 & 8) == 0 || (v15 & 4) != 0) )
              {
                RtlpMuiRegAddLanguageByName(
                  a1,
                  *(void **)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 8),
                  (WCHAR *)v3 + 40,
                  v14,
                  Length,
                  (__int16 *)v3 + 2);
              }
            }
          }
        }
      }
    }
    v16 = *(void **)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 8);
    if( v16 )
    {
      NtClose(v16);
      *(_QWORD *)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 8) = 0i64;
    }
    ++v5;
  }
  while( v7 != -2147483622 );
  v7 = 0;
LABEL_19:
  v17 = *(void **)(((unsigned __int64)&v21 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10);
  if( v17 )
    NtClose(v17);
  return(unsigned int)v7;
}

Referenced by:

RtlpMuiRegLoadInstalled