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