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