LdrpGetFromMUIMemCache

NTSTATUS __stdcall LdrpGetFromMUIMemCache(PVOID Module, UINT16 LangId, UINT64 *Size, UINT64 Flags){
  char v4; 
  _DWORD *v8; 
  INT64 v9; 
  IMAGE_NT_HEADERS *v10; 
  int i; 
  __int64 v12; 
  char v14; 
  v4 = Flags;
  LODWORD(v8) = 0;
  v14 = 0;
  if( (Flags & 0xC) == 0 || (Flags & 0xFFFFFFF3) != 0 || (Flags & 4) != 0 && !LangId )
    return 0;
  v10 = RtlImageNtHeader((PVOID)((unsigned __int64)Module & 0xFFFFFFFFFFFFFFFCui64));
  if( !v10 )
    return 0;
  if( Size )
    *Size = 0i64;
  LdrpInitMuiCrits(v9);
  KeWaitForSingleObject(&MuiMutex, Executive, 0, 0, 0i64);
  for( i = AlternateResourceModuleCount - 1; i >= 0; --i )
  {
    v12 = (__int64)i << 6;
    if( *(PVOID *)((char *)AlternateResourceModules + v12 + 8) == Module )
    {
      if( *(_DWORD *)((char *)AlternateResourceModules + v12 + 24) != v10->OptionalHeader.CheckSum )
      {
        v14 = 1;
        break;
      }
      if( (v4 & 8) != 0 )
      {
        if( *(_QWORD *)((char *)AlternateResourceModules + v12 + 16) )
        {
          _mm_lfence();
          v8 = (_DWORD *)*((_QWORD *)AlternateResourceModules + 8 * (__int64)i + 2);
          if( (unsigned __int64)v8 - 1 <= 0xFFFFFFFFFFFFFFFDui64 && *v8 != -20054323 )
          {
            v14 = 1;
            LODWORD(v8) = 0;
          }
          break;
        }
      }
      else if( (v4 & 4) != 0 && LangId && *(_WORD *)((char *)AlternateResourceModules + v12) == LangId )
      {
        v8 = *(_DWORD **)((char *)AlternateResourceModules + v12 + 32);
        if( Size )
          *Size = *(_QWORD *)((char *)AlternateResourceModules + v12 + 48);
        break;
      }
    }
  }
  KeReleaseMutant(&MuiMutex, 1, 0, 0);
  if( v14 )
    LdrUnloadAlternateResourceModuleEx(Module);
  return(int)v8;
}

Referenced by:

LdrLoadAlternateResourceModuleEx
LdrResGetRCConfig
LdrpGetRcConfig