HalpWatchdogCheckPreResetNMI
NTSTATUS __stdcall HalpWatchdogCheckPreResetNMI(){
unsigned __int64 v0;
int v1;
void *v2;
void *v3;
INT64 CurrentQpc;
CurrentQpc = 0i64;
LODWORD(v0) = (_DWORD)HalpWatchdogTimer;
if( HalpWatchdogTimer )
{
v1 = *((_DWORD *)HalpWatchdogTimer + 57);
if( v1 == 8 )
{
LODWORD(v0) = KeGetPcr()->Prcb.Number;
if( (_DWORD)v0 )
return v0;
v0 = __readmsr(0x40000112u);
if( !v0 )
return v0;
__writemsr(0x40000112u, 0i64);
}
else
{
if( v1 != 13 )
return v0;
v0 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C4A350 + 100000000;
if( v0 <= qword_140C4A330 )
return v0;
}
v2 = (void *)(*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C4A350);
LODWORD(v0) = RtlGetInterruptTimePrecise(&CurrentQpc);
v3 = (void *)v0;
LODWORD(v0) = *((_DWORD *)HalpWatchdogTimer + 57);
if( (_DWORD)v0 == 8 )
KeBugCheckEx(0x1CAu, v2, v3, (PVOID)CurrentQpc, (PVOID)(unsigned int)KiClockTimerOwner);
if( (_DWORD)v0 == 13 )
KeBugCheckEx(0x1CFu, v2, v3, (PVOID)CurrentQpc, (PVOID)(unsigned int)KiClockTimerOwner);
}
return v0;
}Referenced by:
HalpPreprocessNmi