MiCreatePteCopyList

INT64 __fastcall MiCreatePteCopyList(unsigned __int64 a1, unsigned __int64 a2, __int64 a3){
  UINT64 v4; 
  INT64 result; 
  int v6; 
  bool v7; 
  *(_DWORD *)a3 = 0;
  *(_QWORD *)(a3 + 16) = 0i64;
  *(_WORD *)(a3 + 8) = 17;
  if( a1 <= a2 >> 1 )
    v4 = (unsigned int)(2 * a1);
  else
    v4 = (unsigned int)a2 & 0xFFFFFFFE;
  *(_DWORD *)(a3 + 4) = v4;
  do
  {
    result = MiReservePtes((INT64)&qword_140C4EC80, v4);
    *(_QWORD *)(a3 + 16) = result;
    if( result )
      break;
    v6 = *(_DWORD *)(a3 + 4);
    v7 = v6 == 2;
    result = (unsigned int)(v6 - 2);
    *(_DWORD *)(a3 + 4) = result;
    v4 = (unsigned int)result;
  }
  while( !v7 );
  return result;
}

Referenced by:

MiAddPagesToEnclave
MiCopyPage
MiCopyPagesIntoEnclave
MiFillPerSessionProtos
MiFindContiguousPages
MiGetPteMappingPair
MiInitializeScrubPacket
MmRelocatePfnList