HalpVpptAcknowledgeInterrupt
VOID __stdcall HalpVpptAcknowledgeInterrupt(PVOID TimerData){
PVOID v2;
PVOID v3;
__int64 v4;
__int64 v5;
void *v6;
void *v7;
__int64 v8;
unsigned __int64 v9;
unsigned __int64 v10;
INT64 *v11;
INT64 *v12;
INT64 v13;
__int64 v14;
__int64 v15;
unsigned __int64 v16;
INT64 CurrentQpc;
byte_140C4A478[0] = HalpAcquireHighLevelLock(&unk_140C4A470);
HalpTimerGetInternalData((_KDPC *)qword_140C4A480, qword_140C4A480, v2, v3);
(*(void(__fastcall **)(__int64))(v4 + 120))(v5);
if( !(unsigned __int8)((__int64(*)(void))qword_140C4A430)() )
{
if( (PVOID)Arg2 != TimerData )
goto LABEL_15;
v8 = *(_QWORD *)Arg2;
if( *(INT64 **)(Arg2 + 8) == &Arg2 && *(_QWORD *)(v8 + 8) == Arg2 )
{
Arg2 = *(_QWORD *)Arg2;
*(_QWORD *)(v8 + 8) = &Arg2;
if( !*((_QWORD *)TimerData + 5) )
{
*((_BYTE *)TimerData + 24) = 0;
LABEL_15:
if( (INT64 *)Arg2 == &Arg2 )
{
HalpTimerGetInternalData((_KDPC *)qword_140C4A480, qword_140C4A480, v6, v7);
(*(void(__fastcall **)(__int64))(v14 + 136))(v15);
}
else
{
HalpVpptUpdatePhysicalTimer();
}
goto LABEL_20;
}
CurrentQpc = 0i64;
LODWORD(v9) = RtlGetInterruptTimePrecise(&CurrentQpc);
v10 = *((_QWORD *)TimerData + 4);
if( v10 <= v9 )
{
do
v10 += *((_QWORD *)TimerData + 5);
while( v10 <= v9 );
*((_QWORD *)TimerData + 4) = v10;
}
v11 = (INT64 *)Arg2;
v12 = &Arg2;
while( v11 != &Arg2 && v10 >= v11[4] )
{
v12 = v11;
v11 = (INT64 *)*v11;
}
v13 = *v12;
if( *(INT64 **)(*v12 + 8) == v12 )
{
*(_QWORD *)TimerData = v13;
*((_QWORD *)TimerData + 1) = v12;
*(_QWORD *)(v13 + 8) = TimerData;
*v12 = (INT64)TimerData;
goto LABEL_15;
}
}
__fastfail(3u);
}
LABEL_20:
v16 = byte_140C4A478[0];
KxReleaseSpinLock(&unk_140C4A470);
__writecr8(v16);
}Referenced by:
No references.