LdrpGetFromMUIMemCache

VOID *__stdcall LdrpGetFromMUIMemCache(VOID *Module, UINT16 LangId, UINT64 *Size, UINT64 Flags){
  char v4; 
  _DWORD *v8; 
  __int64 v9; 
  VOID *v10; 
  INT64 *v11; 
  INT64 v12; 
  INT64 v13; 
  __int64 v14; 
  int i; 
  __int64 v16; 
  PLARGE_INTEGER Timeout; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  char v22; 

  v4 = Flags;
  v8 = 0i64;
  v22 = 0;
  if( (Flags & 0xC) == 0 || (Flags & 0xFFFFFFF3) != 0 || (Flags & 4) != 0 && !LangId )
    return 0i64;
  LODWORD(v9) = RtlImageNtHeader((unsigned __int64)Module & 0xFFFFFFFFFFFFFFFCui64);
  v14 = v9;
  if( !v9 )
    return 0i64;
  if( Size )
    *Size = 0i64;
  LdrpInitMuiCrits(v11, v10, v12, v13, (INT64)Timeout, v19, v20, v21);
  KeWaitForSingleObject((UINT64)&MuiMutex, 0, 0, 0, 0i64);
  for( i = AlternateResourceModuleCount - 1; i >= 0; --i )
  {
    v16 = (__int64)i << 6;
    if( *(VOID **)((char *)AlternateResourceModules + v16 + 8) == Module )
    {
      if( *(_DWORD *)((char *)AlternateResourceModules + v16 + 24) != *(_DWORD *)(v14 + 88) )
      {
        v22 = 1;
        break;
      }
      if( (v4 & 8) != 0 )
      {
        if( *(_QWORD *)((char *)AlternateResourceModules + v16 + 16) )
        {
          _mm_lfence();
          v8 = (_DWORD *)*((_QWORD *)AlternateResourceModules + 8 * (__int64)i + 2);
          if( (unsigned __int64)v8 - 1 <= 0xFFFFFFFFFFFFFFFDui64 && *v8 != -20054323 )
          {
            v22 = 1;
            v8 = 0i64;
          }
          break;
        }
      }
      else if( (v4 & 4) != 0 && LangId && *(_WORD *)((char *)AlternateResourceModules + v16) == LangId )
      {
        v8 = *(_DWORD **)((char *)AlternateResourceModules + v16 + 32);
        if( Size )
          *Size = *(_QWORD *)((char *)AlternateResourceModules + v16 + 48);
        break;
      }
    }
  }
  KeReleaseMutant(&MuiMutex, 1i64, 0, 0);
  if( v22 )
    LdrUnloadAlternateResourceModuleEx(Module);
  return v8;
}

Referenced by:

LdrLoadAlternateResourceModuleEx
LdrResGetRCConfig
LdrpGetRcConfig