KiUpdateTimer2Flags

VOID __fastcall KiUpdateTimer2Flags(_KTIMER2 *Timer, UINT64 FlagsToSet, UINT64 UpdateFlags){
  char v3; 
  int v4; 
  int v5; 
  unsigned int v7; 
  int v8; 
  int v9; 
  int v10; 
  signed __int32 v11; 
  signed __int32 v12; 

  v3 = UpdateFlags;
  v4 = FlagsToSet;
  v5 = *(_DWORD *)Timer->gap0;
  v7 = ((((UpdateFlags & 1) == 0) + 30) << 7) & 0xFFFFF0FF;
  if( (UpdateFlags & 2) == 0 )
    v7 = (((UpdateFlags & 1) == 0) + 30) << 7;
  v8 = v4 << 8;
  v9 = ~v7;
  v10 = v8 | v5 & v9;
  v11 = _InterlockedCompareExchange((volatile signed __int32 *)Timer, v10, *(_DWORD *)Timer->gap0);
  if( v5 != v11 )
  {
    do
    {
      v12 = v11;
      v10 = v8 | v11 & v9;
      v11 = _InterlockedCompareExchange((volatile signed __int32 *)Timer, v10, v11);
    }
    while( v12 != v11 );
  }
  if( (v3 & 4) != 0 && (v10 & 0x3F00) == 0x2000 )
    KiFinalizeTimer2Disablement(Timer);
}

Referenced by:

KeCancelTimer2
KeDisableTimer2
KiExpireTimer2
KiTimer2Expiration
KiTraceSetTimer2