MmCheckForSafeExecution

UINT8 __stdcall MmCheckForSafeExecution(
        VOID *InstructionPointer,
        VOID *StackPointer,
        VOID *BranchTarget,
        UINT8 PermitStackExecution){
  _ETHREAD *CurrentThread; 
  UINT8 v9; 
  _EPROCESS *Process; 
  _MMVAD *Address; 
  _MMVAD *v12; 
  _MMVAD *v13; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v9 = 1;
  Process = CurrentThread->Tcb.ApcState.Process;
  LOCK_ADDRESS_SPACE_SHARED(CurrentThread, Process);
  if( !PermitStackExecution
    && ((MiLocateAddress(InstructionPointer), Address = MiLocateAddress(StackPointer), !v12)
     || !Address
     || v12 == Address
     || (v12->Core.u.LongFlags & 0x70) == 32)
    || (v13 = MiLocateAddress(BranchTarget)) == 0i64
    || (v13->Core.u.LongFlags & 0x70) != 32 )
  {
    v9 = 0;
  }
  UNLOCK_ADDRESS_SPACE_SHARED(CurrentThread, Process);
  if( v9 == 1 )
    return MmValidateUserCallTarget(BranchTarget) != 0;
  return v9;
}

Referenced by:

KiEmulateAtlThunk