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