RtlpMuiRegInitLIPLanguage

__int64 __fastcall RtlpMuiRegInitLIPLanguage(__int64 a1, void *a2, _BYTE *a3){
  unsigned __int64 v3; 
  unsigned int v7; 
  unsigned int v8; 
  WCHAR v9; 
  __int64 v10; 
  WCHAR v11; 
  int ValueKey; 
  int v13; 
  WCHAR v14; 
  unsigned __int64 v15; 
  UINT64 Length; 
  _LARGE_INTEGER *ResultLength; 
  _LARGE_INTEGER *ResultLengtha; 
  int v20; 
  v3 = (unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64;
  *(_DWORD *)(v3 + 28) = 0;
  v7 = 0;
  v8 = 0;
  *(_OWORD *)(v3 + 8) = 0i64;
  memset(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 32, 0i64);
  LODWORD(v10) = 0;
  if( !a1 || !a2 || !a3 || (*a3 & 4) == 0 )
    return 3221225485i64;
  RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), L"DefaultFallback", v9);
  *(_DWORD *)v3 = 1;
  *(_DWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x18) = 170;
  if( (int)LdrpQueryValueKey(
              a2,
              (_UNICODE_STRING *)(v3 + 8),
              (UINT64 *)((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64),
              (VOID *)(v3 + 32),
              (UINT64 *)(v3 + 24),
              ResultLength) < 0
    || *(_DWORD *)v3 != 1 )
  {
    goto LABEL_29;
  }
  RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), (PCWSTR)(v3 + 32), v11);
  *(_DWORD *)v3 = 7;
  ValueKey = LdrpQueryValueKey(
               a2,
               (_UNICODE_STRING *)(v3 + 8),
               (UINT64 *)((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64),
               0i64,
               0i64,
               ResultLengtha);
  v13 = ValueKey;
  if( (!ValueKey || ValueKey == -2147483643)
    && (*(_DWORD *)v3 == 7 || *(_DWORD *)v3 == 1)
    && (int)RtlMuiRegAddLIPParent(a1, (__int64)a3, 0, (const WCHAR *)(v3 + 32)) >= 0 )
  {
    v7 = 1;
    v10 = -1i64;
    do
      ++v10;
    while( *(_WORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x20 + 2 * v10) );
  }
  if( v13 != -2147483622 )
  {
LABEL_29:
    while( v7 < 4 )
    {
      LODWORD(Length) = 512;
      if( ZwEnumerateValueKey(a2, v8, KeyValueFullInformation, (VOID *)(v3 + 224), Length, (UINT64 *)(v3 + 28)) < 0 )
        break;
      if( *(_DWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0xE4) == 7
        || *(_DWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0xE4) == 1 )
      {
        v15 = *(unsigned int *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0xF0);
        if( v15 + 24 <= 0x200 )
        {
          *(_WORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 2 * (v15 >> 1) + 0xF4) = 0;
          RtlInitUnicodeString((PUNICODE_STRING)(v3 + 8), (PCWSTR)(v3 + 244), v14);
          if( (!(_DWORD)v10
             || RtlCompareUnicodeStrings(
                  *(_QWORD *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10),
                  (unsigned __int64)*(unsigned __int16 *)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 8) >> 1,
                  v3 + 32))
            && (int)RtlMuiRegAddLIPParent(
                      a1,
                      (__int64)a3,
                      v7,
                      *(const WCHAR **)(((unsigned __int64)&v20 & 0xFFFFFFFFFFFFFFE0ui64) + 0x10)) >= 0 )
          {
            ++v7;
          }
        }
      }
      ++v8;
    }
  }
  return 0i64;
}

Referenced by:

RtlpMuiRegAddLanguageByName