MiMapPageInHyperSpaceWorker

VOID *__stdcall MiMapPageInHyperSpaceWorker(UINT64 PageFrameIndex, UINT8 *OldIrql, UINT64 Flags){
  int v3; 
  int v4; 
  int v6; 
  __int64 v7; 
  __int64 v8; 
  struct _KPRCB *CurrentPrcb; 
  _MI_ZERO_THREAD_CONTEXT *MmInternal; 
  _MMPTE *PteBase; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  _QWORD *v14; 
  int v15; 
  UINT8 CurrentIrql; 

  v3 = Flags;
  v4 = 4;
  if( (v3 & 0x20000000) != 0 )
    v4 = 1;
  if( (v3 & 0x40000000) != 0 )
  {
    v6 = v3 & 3;
    if( v6 == 2 )
    {
      v4 |= 0x2000000u;
LABEL_17:
      v4 |= 0x18u;
      goto LABEL_8;
    }
  }
  else
  {
    v6 = *((unsigned __int8 *)&MmGetPfnDb()[PageFrameIndex].u3 + 2) >> 6;
  }
  if( v6 && v6 != 3 )
  {
    if( v6 != 2 )
      goto LABEL_8;
    goto LABEL_17;
  }
  v4 |= 8u;
LABEL_8:
  LODWORD(v7) = MiMakeValidPte(0i64, PageFrameIndex, v4 | 0xA0000000);
  v8 = v7;
  if( OldIrql )
  {
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    *OldIrql = CurrentIrql;
  }
  CurrentPrcb = KeGetCurrentPrcb();
  MmInternal = (_MI_ZERO_THREAD_CONTEXT *)CurrentPrcb->MmInternal;
  if( MmInternal )
  {
    MiGetUltraMapping(MmInternal + 3112, 3i64);
    PteBase = MmGetPteBase();
    v13 = v12;
    v14 = (unsigned __int64 *)((char *)&PteBase->u.Long + ((v12 >> 9) & 0x7FFFFFFFF8i64));
    *((_QWORD *)MmInternal + 1543) = v14;
    if( v12 )
      goto LABEL_12;
  }
  else
  {
    PteBase = MmGetPteBase();
  }
  v13 = ((unsigned __int64)CurrentPrcb->HyperPte & 0xFFFFFFFFFFFFF000ui64)
      + (((__int64)CurrentPrcb->HyperPte & 0xFFF) << 12);
  v14 = (unsigned __int64 *)((char *)&PteBase->u.Long + ((v13 >> 9) & 0x7FFFFFFFF8i64));
LABEL_12:
  LOBYTE(v15) = MiPteInShadowRange((UINT64)v14);
  if( v3 >= 0 )
  {
    if( v15 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v8 & 1) != 0 )
      goto LABEL_27;
  }
  else if( v15 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v8 & 1) != 0 )
  {
LABEL_27:
    v8 |= 0x8000000000000000ui64;
  }
  *v14 = v8;
  return(VOID *)v13;
}

Referenced by:

KiInSwapProcesses
MiArePageContentsZero
MiBuildMappedCluster
MiClearContainingMapping
MiCompletePrivateZeroFault
MiComputePageHash
MiConfirmPageIsZero
MiConvertPrivateToProto
MiConvertStandbyToProto
MiCopySinglePage
MiCopyToUserVa
MiCreateSystemPageTable
MiDemoteValidLargePageOneLevel
MiFillPhysicalPages
MiFinishLastForkPageTable
MiFlushCacheForAttributeChange
MiFreePagesFromMdl
MiGetFileHashPage
MiInitializeImageHeaderPage
MiInitializeImageProtos
MiMakeProtoTransition
MiMirrorOmitPagesFromCopy
MiPersistPage
MiReadWriteAnyLevelShadowPte
MiReplaceTransitionPage
MiReplicatePteChangeToProcess
MiRestoreTransitionPte
MiRewriteTrimPteAsDemandZero
MiSplitDirectMapPage
MiSwapNumaStandbyPage
MiUpdateSystemPdes
MiWaitForInPageComplete
MiZeroCfgSystemWideBitmapWorker
MmOutSwapProcess
MmReplaceImportEntry
MmUpdateUserShadowStackValue