NtTerminateEnclave

NTSTATUS __stdcall NtTerminateEnclave(_XSTATE_CONFIGURATION *a1, UINT64 a2){
  unsigned int v2; 
  INT64 v5; 
  _MMVAD_SHORT *v6; 
  NTSTATUS v7; 
  INT64 v8; 

  LODWORD(v8) = 0;
  v2 = a2;
  if( (a2 & 0xFFFFFFFA) != 0 )
    return -1073741584;
  LODWORD(v5) = MiObtainReferencedVadEx((UINT64)a1, 0, &v8);
  v6 = (_MMVAD_SHORT *)v5;
  if( !v5 )
    return v8;
  if( (*(_DWORD *)(v5 + 48) & 0x3100000) == 34603008
    && (_XSTATE_CONFIGURATION *)((*(unsigned int *)(v5 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v5 + 32) << 32)) << 12) == a1 )
  {
    v7 = MiTerminateEnclave((INT64)KeGetCurrentThread()->ApcState.Process, v5, v2);
  }
  else
  {
    v7 = -1073741800;
  }
  MiUnlockAndDereferenceVad(v6);
  return v7;
}

Referenced by:

No references.