RtlpLoadLanguageConfigList

__int64 __fastcall RtlpLoadLanguageConfigList(int a1, void **a2, __int64 a3){
  void *v5; 
  UINT64 v6; 
  WCHAR v7; 
  UINT64 v8; 
  int v9; 
  int v10; 
  void *v12; 
  CHAR *LanguageConfigList; 
  struct _UNICODE_STRING DestinationString; 
  int v15; 
  __int16 v16; 
  HANDLE Handle; 
  v15 = a1;
  LOBYTE(v15) = 0;
  v16 = 0;
  Handle = 0i64;
  v5 = 0i64;
  DestinationString = 0i64;
  if( a2 && a3 )
  {
    v5 = *a2;
    RtlInitUnicodeString(&DestinationString, L"\\Registry\\Machine\\Software\\Policies\\Microsoft\\MUI\\Settings", a3);
    if( (int)LdrpOpenKey(&DestinationString, 0i64, v6, &Handle) >= 0 )
    {
      v10 = RtlpLoadPolicyLanguageSpec(Handle, a3, (BYTE *)&v15, &v16);
      if( v10 >= 0 )
        goto LABEL_6;
      NtClose(Handle);
      Handle = 0i64;
    }
    RtlInitUnicodeString(
      &DestinationString,
      L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\MUI\\Settings\\LanguageConfiguration",
      v7);
    v9 = LdrpOpenKey(&DestinationString, 0i64, v8, &Handle);
    v10 = v9;
    if( v9 < 0 )
    {
      if( v9 == -1073741772 )
        v10 = 0;
    }
    else
    {
      v10 = RtlpPopulateLanguageConfigList(Handle, (CHAR **)a2, a3);
    }
  }
  else
  {
    v10 = -1073741811;
  }
LABEL_6:
  if( Handle )
    NtClose(Handle);
  if( v10 < 0 )
  {
    if( a2 )
    {
      v12 = *a2;
      if( *a2 != v5 )
      {
        if( v12 )
          ExFreePoolWithTag(v12, 0);
        goto LABEL_22;
      }
    }
  }
  else if( !*a2 )
  {
    LanguageConfigList = RtlpMuiRegCreateLanguageConfigList(1ui64);
    *a2 = LanguageConfigList;
    if( !LanguageConfigList )
    {
      v10 = -1073741801;
LABEL_22:
      *a2 = v5;
    }
  }
  return(unsigned int)v10;
}

Referenced by:

RtlpMuiRegLoadRegistryInfo