HalpTimerInitializeSystemWatchdog
INT64 __fastcall HalpTimerInitializeSystemWatchdog(){
_DWORD *v0;
unsigned __int64 v1;
bool v2;
unsigned __int64 v3;
unsigned int v4;
unsigned int v5;
INT64 result;
signed __int32 v7[8];
KINTERRUPT_MODE v8;
char(__fastcall *v9)(__int64, __int64, void *, void *);
__int64 v10;
__int64 v11;
char v12;
int v13;
PKINTERRUPT *v14;
__int128 v15;
int v16;
unsigned __int64 v17;
__int64 v18;
v0 = HalpWatchdogTimer;
v18 = 0i64;
v17 = 0i64;
HalpTimerGetClockRates((__int64)HalpWatchdogTimer, &v17, &v16);
v1 = v17;
if( v17 > 0xB2D05E00 )
v1 = 3000000000i64;
v17 = v1;
HalpTimerWatchdogTimeout = v1;
v2 = (v0[56] & 0x80000) == 0;
HalpTimerWatchdogResetCount = v1 >> 2;
if( v2 )
goto LABEL_7;
v14 = (PKINTERRUPT *)&v18;
v3 = 0i64;
v13 = 5;
if( KeActiveProcessors.Count )
v3 = KeActiveProcessors.Bitmap[0];
v12 = 15;
v11 = 0i64;
v10 = 0i64;
v4 = v0[22];
v9 = HalpTimerWatchdogPreResetInterrupt;
v8 = v0[24];
v5 = v0[23];
v15 = v3;
LODWORD(result) = HalpInterruptConnect(
(__int64)&v15,
v4,
0xF0u,
0xFu,
v5,
v8,
(unsigned __int64)HalpTimerWatchdogPreResetInterrupt,
0i64,
0i64,
0xFu,
v13,
v14);
if( (int)result >= 0 )
{
LABEL_7:
_InterlockedOr(v7, 0);
off_140C008C8[0] = HalpTimerWatchdogStop;
off_140C008B8[0] = HalpTimerWatchdogStart;
off_140C008D0[0] = (__int64(__fastcall *)())HalpTimerWatchdogGeneratedLastReset;
off_140C008D8[0] = (__int64(__fastcall *)())HalpTimerWatchdogTriggerSystemReset;
off_140C00968[0] = (__int64(__fastcall *)())HalpTimerWatchdogQueryDueTime;
_InterlockedOr(v7, 0);
HalpTimerWatchdogStart();
_InterlockedOr(v7, 0);
off_140C008C0[0] = (__int64(__fastcall *)())HalpTimerWatchdogResetCountdown;
return 0i64;
}
return result;
}Referenced by:
No references.