HalpTimerRestorePerformanceCounter

UINT64 __stdcall HalpTimerRestorePerformanceCounter(){
  void *v0; 
  void *v1; 
  void *v2; 
  _KDPC **v3; 
  unsigned int Number; 
  unsigned int v5; 
  _KDPC *v6; 
  __int64 v7; 
  int v8; 
  UINT64 result; 
  unsigned int v10; 
  PVOID v11; 
  UINT64 v12; 
  _QWORD v13[3]; 

  v3 = (_KDPC **)v13;
  Number = KeGetPcr()->Prcb.Number;
  v5 = 0;
  v13[0] = HalpPerformanceCounter;
  v13[1] = HalpAlwaysOnCounter;
  do
  {
    v6 = *v3;
    if( *v3 )
    {
      HalpTimerGetInternalData(*v3, v0, v1, v2);
      v8 = ((__int64(__fastcall *)(__int64))v6[1].SystemArgument1)(v7);
      v1 = (void *)v8;
      if( v8 < 0 )
      {
        LODWORD(v12) = 2246;
        HalpTimerSetProblemEx((INT64)v6, 15i64, v8, (INT64)"minkernel\\hals\\lib\\timers\\common\\timer.c", v12);
        KeBugCheckEx(v10 + 77, (PVOID)0x110, v6, (PVOID)v10, v11);
      }
      if( HIDWORD(v6[3].DeferredContext) != 5 && !Number )
        HalpTimerCalibratePerformanceCounter((INT64)v6, (char *)v6->ProcessorHistory, (void *)v8, v2);
    }
    ++v5;
    ++v3;
  }
  while( v5 < 2 );
  result = KeQueryPerformanceCounter(0i64);
  HalpTimerEarliestQpcAllowedToConvert = result;
  return result;
}

Referenced by:

HalpAcpiPostSleep