MiReserveEnclavePages

NTSTATUS __stdcall MiReserveEnclavePages(INT64 a1, INT64 a2, UINT64 a3){
  unsigned __int64 v6; 
  NTSTATUS v7; 
  __int64 v9; 
  _MMPFN *v10; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(a2 + 4192), &LockHandle);
  v6 = *(_QWORD *)(a2 + 4160);
  if( v6 < a3 )
  {
    v7 = -1073741801;
  }
  else
  {
    *(_QWORD *)(a2 + 4160) = v6 - a3;
    v7 = 0;
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  if( v7 < 0 )
    return v7;
  for( *(_QWORD *)(a1 + 104) += a3; a3; --a3 )
  {
    LODWORD(v9) = MiGetEnclavePage((_MI_PARTITION *)a2, 1ui64);
    v10 = &MmGetPfnDb()[v9];
    v10->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = *(_QWORD *)(a1 + 96);
    *(_QWORD *)(a1 + 96) = v10;
  }
  return 0;
}

Referenced by:

MiAddPagesToEnclave
MiCreateHardwareEnclave