MiReserveEnclavePages

__int64 __fastcall MiReserveEnclavePages(__int64 a1, UINT64 *a2, unsigned __int64 a3){
  UINT64 v6; 
  int v7; 
  _QWORD *v9; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(a2 + 524, &LockHandle);
  v6 = a2[520];
  if( v6 < a3 )
  {
    v7 = -1073741801;
  }
  else
  {
    a2[520] = v6 - a3;
    v7 = 0;
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( v7 < 0 )
    return(unsigned int)v7;
  for( *(_QWORD *)(a1 + 104) += a3; a3; --a3 )
  {
    v9 = (_QWORD *)((char *)MmGetPfnDb() + 48 * MiGetEnclavePage((_MI_PARTITION *)a2, 1ui64));
    *v9 = *(_QWORD *)(a1 + 96);
    *(_QWORD *)(a1 + 96) = v9;
  }
  return 0i64;
}

Referenced by:

MiAddPagesToEnclave
MiCreateHardwareEnclave