HalpTimerDpcRoutine
VOID __stdcall HalpTimerDpcRoutine(_KDPC *Dpc, VOID *Context, VOID *SystemArgument1, VOID *SystemArgument2){
void *v4;
void *v5;
void *v6;
PVOID v7;
unsigned __int64 v8;
_KDPC *v9;
__int64 v10;
__int64 v11;
__int64 v12;
signed __int64 v13;
__int64 v14;
__int64 v15;
unsigned __int64 v16;
signed __int64 v17;
int v18;
__int64 v19;
__int64 v20;
unsigned __int64 v21;
__int64 v22;
int v23[8];
KeQueryPerformanceCounter(0i64);
v7 = HalpAlwaysOnCounter;
if( HalpAlwaysOnCounter )
{
if( *((_DWORD *)HalpAlwaysOnCounter + 55) == 64 )
{
HalpTimerGetInternalData((_KDPC *)HalpAlwaysOnCounter, v4, v5, v6);
v11 = (*((__int64(__fastcall **)(__int64))v7 + 14))(v10);
v12 = *((_QWORD *)v7 + 26);
v13 = v11;
}
else
{
do
{
v12 = *((_QWORD *)v7 + 26);
do
{
v14 = *((_QWORD *)v7 + 25);
HalpTimerGetInternalData((_KDPC *)v7, v4, v5, v6);
v16 = (*((__int64(__fastcall **)(__int64))v7 + 14))(v15);
_InterlockedOr(v23, 0);
v17 = *((_QWORD *)v7 + 25);
}
while( v14 != v17 );
}
while( v12 != *((_QWORD *)v7 + 26) );
v18 = *((_DWORD *)v7 + 55);
if( ((v14 ^ v16) & (1i64 << ((unsigned __int8)v18 - 1))) != 0 )
{
v19 = 1i64 << v18;
if( v18 == 64 )
v20 = -1i64;
else
v20 = v19 - 1;
v21 = v14 & v20;
v13 = v16 | v14 ^ v21;
if( v16 < v21 )
v13 += v19;
_InterlockedCompareExchange64((volatile signed __int64 *)v7 + 25, v13, v17);
}
else
{
if( v18 == 64 )
v22 = -1i64;
else
v22 = (1i64 << v18) - 1;
v13 = v16 | v14 & ~v22;
}
}
if( v12 + v13 < (unsigned __int64)qword_140C4A488 )
KeBugCheckEx(0x5Cu, (PVOID)0x113, (PVOID)0x27, (PVOID)(v12 + v13), qword_140C4A488);
qword_140C4A488 = (PVOID)(v12 + v13);
}
v8 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
if( (unsigned __int64)(*(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - qword_140C4A498) >= 0x47868C00 )
{
v9 = (_KDPC *)_InterlockedExchange64((volatile __int64 *)&KiProcessorBlock->AcpiReserved, 0i64);
if( v9 )
KiInsertQueueDpc(v9, (VOID *)(unsigned int)v8, (VOID *)HIDWORD(v8), 0i64, 0);
qword_140C4A498 = v8;
}
}Referenced by:
No references.