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