HalpBlkPoPerformPpmOperation

CHAR __stdcall HalpBlkPoPerformPpmOperation(){
  __int64 v0; 
  int v1; 
  CHAR result; 
  v0 = *(_QWORD *)KeGetPcr();
  if( _InterlockedCompareExchange((volatile signed __int32 *)(v0 + 2224), 2, 1) != 1 )
    return 0;
  if( *(_DWORD *)(v0 + 2228) == 3 )
  {
    *(_QWORD *)(*(_QWORD *)KeGetPcr() + 2256i64) = *(_QWORD *)(v0 + 2240);
  }
  else
  {
    v1 = *(_DWORD *)(v0 + 2232);
    if( v1 == 1 )
    {
      HalpBlkPoPerformPpmOperationForMsr(v0 + 2216);
    }
    else if( v1 == 2 )
    {
      HalpBlkPoPerformPpmOperationForIoPort(v0 + 2216);
    }
    else
    {
      __debugbreak();
    }
  }
  _InterlockedIncrement64((volatile signed __int64 *)(v0 + 128));
  result = 1;
  _InterlockedExchange((volatile __int32 *)(v0 + 2224), 0);
  return result;
}

Referenced by:

HalpBlkHandleIpi