KiUpdateTimer2Flags
VOID __stdcall KiUpdateTimer2Flags(_KTIMER2 *Timer, UINT64 FlagsToSet, UINT64 UpdateFlags){
char v3;
int v4;
int LockNV;
unsigned int v7;
int v8;
int v9;
int v10;
signed __int32 v11;
signed __int32 v12;
v3 = UpdateFlags;
v4 = FlagsToSet;
LockNV = Timer->Header.LockNV;
v7 = ((((UpdateFlags & 1) == 0) + 30) << 7) & 0xFFFFF0FF;
if( (UpdateFlags & 2) == 0 )
v7 = (((UpdateFlags & 1) == 0) + 30) << 7;
v8 = v4 << 8;
v9 = ~v7;
v10 = v8 | LockNV & v9;
v11 = _InterlockedCompareExchange(&Timer->Header.Lock, v10, Timer->Header.LockNV);
if( LockNV != v11 )
{
do
{
v12 = v11;
v10 = v8 | v11 & v9;
v11 = _InterlockedCompareExchange(&Timer->Header.Lock, v10, v11);
}
while( v12 != v11 );
}
if( (v3 & 4) != 0 && (v10 & 0x3F00) == 0x2000 )
KiFinalizeTimer2Disablement(Timer);
}Referenced by:
KeCancelTimer2
KeDisableTimer2
KiExpireTimer2
KiTimer2Expiration
KiTraceSetTimer2