TimerControlFlags

The byte at offset 0x01 in a DISPATCHER_OBJECT
whose Type is TimerNotificationObject
(0x08) or TimerSynchronizationObject (0x09) was originally
the single member Absolute but was broken into bit fields
for Windows 7 to accommodate the TolerableDelay argument
of the new KeSetCoalescableTimer function without
extending the KTIMER.

Mask

Definition

Versions

0x01

UCHAR Absolute : 1;

6.1 and higher

0x02

UCHAR Coalescable : 1;

6.1 only

UCHAR Wake : 1;

6.2 and higher

0x04 (6.1)

UCHAR KeepShifting : 1;

6.1 only

0xF8 (6.1);
0xFC

UCHAR EncodedTolerableDelay : 5;

6.1 only

UCHAR EncodedTolerableDelay : 6;

6.2 and higher

If a timer is set though KeSetCoalescableTimer
with a non-zero TolerableDelay, then
Coalescable is set. If a non-zero
Period is specified too, then in Windows 7
KeepShifting is set and the EncodedTolerableDelay
is the binary logarithm of the TolerableDelay. Perhaps
this was thought too coarse, at least for long tolerances on long periods. For instance,
of the documentation’s suggestions, 150 and 250ms both get treated as 128. Windows
8 changed to a proportional encoding: specifically, the EncodedTolerableDelay
is the TolerableDelay (in milliseconds) multiplied
by 10,000 and shifted right by 18 bits, truncated to a maximum of 0x3F.

This page was created on 7th October 2017 from material that
was first published on 20th June 2016.