LdrpGetMappingFromCacheEntry

UINT8 __stdcall LdrpGetMappingFromCacheEntry(
        UINT64 ModuleIndex,
        _IMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry,
        PVOID *pAlternateModule,
        UINT64 *pImageSize){
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  UINT64 v9; 
  UINT8 result; 
  __int64 v11; 
  __int16 v12; 

  if( !ResourceDataEntry )
    return 0;
  if( !pAlternateModule )
    return 0;
  if( (unsigned int)ModuleIndex >= (unsigned int)AlternateResourceModuleCount )
    return 0;
  _mm_lfence();
  v7 = (unsigned __int64)(unsigned int)ModuleIndex << 6;
  v8 = *(_QWORD *)((char *)AlternateResourceModules + v7 + 32);
  v9 = *(_QWORD *)((char *)AlternateResourceModules + v7 + 48);
  if( v8 - 1 > 0xFFFFFFFFFFFFFFFDui64 )
    return 0;
  if( !v9 )
  {
    LODWORD(v11) = RtlImageNtHeader(v8 & 0xFFFFFFFFFFFFFFFCui64);
    if( !v11 )
      return 0;
    v12 = *(_WORD *)(v11 + 24);
    if( v12 == 267 || v12 == 523 )
      v9 = *(unsigned int *)(v11 + 80);
    else
      v9 = 0i64;
    if( !v9 )
      return 0;
  }
  if( (unsigned __int64)ResourceDataEntry < (v8 & 0xFFFFFFFFFFFFFFFCui64)
    || (unsigned __int64)ResourceDataEntry >= v9 + (v8 & 0xFFFFFFFFFFFFFFFCui64) )
  {
    return 0;
  }
  *pAlternateModule = (PVOID)v8;
  result = 1;
  *pImageSize = v9;
  return result;
}

Referenced by:

LdrpGetAlternateResourceModuleHandleEx