MiGetPteFromCopyList

_MMPTE *__stdcall MiGetPteFromCopyList(_MMPTE_COPY_LIST *PteCopyList, UINT64 DestinationPage, UINT64 SourcePage){
  int v6; 
  int v7; 
  __int64 v8; 
  int v9; 
  struct {unsigned __int16 ReferenceCount;} *v10; 
  _XSTATE_CONFIGURATION *v11; 
  char v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  int v15; 
  char v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  int v19; 
  UINT64 v21; 
  __int64 v22; 
  _MI_TB_FLUSH_LIST TbFlushList[48]; 

  memset(TbFlushList, 0i64, 0xB8u);
  v6 = 2;
  v7 = 1;
  if( SourcePage == -1i64 )
    v6 = 1;
  v8 = (unsigned int)*PteCopyList;
  if( (int)v8 + v6 > (unsigned int)PteCopyList[1] )
  {
    v21 = (unsigned int)*PteCopyList;
    TbFlushList[2] = 20;
    v22 = *((_QWORD *)PteCopyList + 2) << 25;
    *(_QWORD *)&TbFlushList[6] = 0i64;
    MiInsertTbFlushEntry(TbFlushList, (VOID *)((v22 - ((_QWORD)MmGetPteBase() << 25)) >> 16), v21, 0i64);
    MiFlushTbList(TbFlushList);
    v8 = 0i64;
  }
  v9 = 4;
  v10 = &MmGetPfnDb()->u3 + 1;
  v11 = (_XSTATE_CONFIGURATION *)(*((_QWORD *)PteCopyList + 2) + 8 * v8);
  *PteCopyList = v8 + v6;
  v12 = LOBYTE(v10[24 * DestinationPage].ReferenceCount) >> 6;
  if( v12 )
  {
    if( v12 == 2 )
      v9 = 28;
  }
  else
  {
    v9 = 12;
  }
  LODWORD(v13) = MiMakeValidPte(v11, DestinationPage, v9 | 0xA0000000);
  v14 = v13;
  LOBYTE(v15) = MiPteInShadowRange((UINT64)v11);
  if( v15 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v14 & 1) != 0 )
    v14 |= 0x8000000000000000ui64;
  v11->EnabledFeatures = v14;
  if( SourcePage != -1i64 )
  {
    v16 = LOBYTE(v10[24 * SourcePage].ReferenceCount) >> 6;
    if( v16 )
    {
      if( v16 == 2 )
        v7 = 25;
    }
    else
    {
      v7 = 9;
    }
    LODWORD(v17) = MiMakeValidPte(v11, SourcePage, v7 | 0x20000000u);
    v18 = v17;
    LOBYTE(v19) = MiPteInShadowRange((UINT64)&v11->EnabledVolatileFeatures);
    if( v19 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v18 & 1) != 0 )
      v18 |= 0x8000000000000000ui64;
    v11->EnabledVolatileFeatures = v18;
  }
  return(_MMPTE *)v11;
}

Referenced by:

MiAddPagesToEnclave
MiCopyPage
MiCopyPagesIntoEnclave
MiFillPerSessionProtos
MiSwapStackPage