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