HalpBlkPoPerformPpmOperation

INT8 __stdcall HalpBlkPoPerformPpmOperation(){
  _EXCEPTION_REGISTRATION_RECORD *ExceptionList; 
  int Handler; 
  INT8 result; 

  ExceptionList = KeGetPcr()->NtTib.ExceptionList;
  if( _InterlockedCompareExchange((volatile signed __int32 *)&ExceptionList[139], 2, 1) != 1 )
    return 0;
  if( HIDWORD(ExceptionList[139].Next) == 3 )
  {
    KeGetPcr()->NtTib.ExceptionList[141].Next = ExceptionList[140].Next;
  }
  else
  {
    Handler = (int)ExceptionList[139].Handler;
    if( Handler == 1 )
    {
      HalpBlkPoPerformPpmOperationForMsr((INT64)&ExceptionList[138].Handler);
    }
    else if( Handler == 2 )
    {
      HalpBlkPoPerformPpmOperationForIoPort((INT64)&ExceptionList[138].Handler);
    }
    else
    {
      __debugbreak();
    }
  }
  _InterlockedIncrement64((volatile signed __int64 *)&ExceptionList[8]);
  result = 1;
  _InterlockedExchange((volatile __int32 *)&ExceptionList[139], 0);
  return result;
}

Referenced by:

HalpBlkHandleIpi