KeDisableTimer2
VOID __fastcall KeDisableTimer2(_KTIMER2 *Timer, UINT8 Cancel, UINT8 Wait, _PKT2_DISABLE_PARAMETERS *Parameters){
void(__fastcall *v6)(void *);
void *v7;
unsigned __int8 CurrentIrql;
unsigned int v9;
char v10;
unsigned int FlagsToSet;
__int64 v14;
__int64 v15;
__int64 v16;
_LARGE_INTEGER TimeStamp[2];
__int128 v18;
_KAFFINITY_EX Affinity;
memset(&Affinity, 0i64, sizeof(Affinity));
FlagsToSet = 32;
v14 = 0i64;
v6 = 0i64;
v15 = 0i64;
v7 = 0i64;
v16 = 0i64;
*(_OWORD *)&TimeStamp[0].anonymous_0.LowPart = 0i64;
v18 = 0i64;
if( Parameters )
{
v6 = (void(__fastcall *)(void *))(KiWaitNever ^ __ROR8__(
(unsigned __int64)Timer ^ _byteswap_uint64(*(_QWORD *)Parameters ^ KiWaitAlways),
KiWaitNever));
v7 = (void *)(KiWaitNever ^ __ROR8__(
(unsigned __int64)Timer ^ _byteswap_uint64(*((_QWORD *)Parameters + 1) ^ KiWaitAlways),
KiWaitNever));
}
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
if( KiAcquireTimer2LockUnlessDisabled(Timer) )
{
__writecr8(CurrentIrql);
return;
}
if( Parameters )
{
Timer->DisableCallback = v6;
Timer->DisableContext = v7;
}
if( !Cancel )
goto LABEL_9;
if( KiAcquireTimer2CollectionLockIfInserted(Timer) )
{
KiRemoveTimer2(Timer);
KxReleaseSpinLock(&KiTimer2CollectionLock);
}
else
{
if( (Timer->gap0[1] & 0xA) == 0 )
{
LABEL_9:
v9 = 6;
goto LABEL_10;
}
FlagsToSet = 36;
}
v9 = 4;
LABEL_10:
KiUpdateTimer2Flags(Timer, FlagsToSet, v9);
__writecr8(CurrentIrql);
if( Wait )
{
if( !v10 )
{
*(_DWORD *)&Affinity.Count = 1310721;
memset(&Affinity.Reserved, 0i64, 0xA4u);
KeAddProcessorAffinityEx(&Affinity.Count, (unsigned int)KiClockTimerOwner);
KeGenericProcessorCallback(
(__int64 *)&Affinity,
(void(__fastcall *)(struct _KPRCB *, __int64))xHalTimerWatchdogStop,
0i64,
2);
}
}
}Referenced by:
ExDeleteTimer
ExpDeleteTimer2
PopPowerButtonWorkCallback
PopThermalZoneRemove