MmSelectVsmEnclaveByAddress
INT64 __fastcall MmSelectVsmEnclaveByAddress(INT64 a1, UINT64 a2, _QWORD *a3){
INT64 v4;
INT64 v5;
int v7;
unsigned int v8;
INT64 v9;
HIDWORD(v9) = HIDWORD(a1);
LODWORD(v9) = 0;
v4 = MiObtainReferencedVadEx(a2, 0, &v9);
v5 = v4;
if( !v4 )
return(unsigned int)v9;
v7 = *(_DWORD *)(v4 + 48);
v8 = -1073741800;
LODWORD(v9) = -1073741800;
if( (v7 & 0x100000) != 0 && (v7 & 0x1000000) == 0 && (v7 & 0x2000000) != 0 && (*(_DWORD *)(v5 + 64) & 1) == 0 )
{
if( _InterlockedIncrement64((volatile signed __int64 *)(*(_QWORD *)(v5 + 72) + 16i64)) <= 1 )
__fastfail(0xEu);
v8 = 0;
*a3 = *(_QWORD *)(v5 + 72);
}
MiUnlockAndDereferenceVad((PVOID)v5);
return v8;
}Referenced by:
PsCallEnclave