HalpTimerStallCounterPowerChange

CHAR __fastcall HalpTimerStallCounterPowerChange(PVOID BugCheckParameter3, VOID *a2, VOID *a3, VOID *a4){
  _KDPC *v4; 
  int v5; 
  __int64 v6; 
  unsigned __int64 BugCheckParameter4; 

  v4 = (_KDPC *)HalpSavedStallCounter;
  LOBYTE(v5) = (_BYTE)a2;
  if( HalpSavedStallCounter )
  {
    if( BugCheckParameter3 == HalpSavedStallCounter && (_BYTE)a2 )
    {
      if( HalpSavedStallCounter != (PVOID)HalpPerformanceCounter )
      {
        HalpTimerGetInternalData((_KDPC *)HalpSavedStallCounter, a2, a3, a4);
        v5 = ((__int64(__fastcall *)(__int64))v4[1].SystemArgument1)(v6);
        if( v5 < 0 )
          KeBugCheckEx(0x5Cu, (PVOID)0x113, (PVOID)0xF, v4, (PVOID)v5);
      }
      HalpSavedStallCounter = 0i64;
      HalpStallCounter = v4;
    }
  }
  else if( BugCheckParameter3 == HalpStallCounter && !(_BYTE)a2 )
  {
    LOBYTE(v5) = (_BYTE)HalpAlwaysOnCounter;
    if( !HalpAlwaysOnCounter )
      KeBugCheckEx(
        (_DWORD)HalpAlwaysOnCounter + 92,
        (PVOID)0x113,
        (PVOID)(unsigned int)((_DWORD)HalpAlwaysOnCounter + 34),
        BugCheckParameter3,
        (PVOID)((unsigned __int64)HalpAlwaysOnCounter & BugCheckParameter4));
    HalpSavedStallCounter = HalpStallCounter;
    HalpStallCounter = (_KDPC *)HalpAlwaysOnCounter;
  }
  return v5;
}

Referenced by:

HalpTimerPowerChange