The ActiveTimeBias information is stored in the Time Zone Information sub-key as a REG_DWORD signed integer value. This value may be positive or negative. To establish the true value of the key, we must examine the information stored (see Figure 1).
As the REG_DWORD value can store both signed and unsigned values, with no way to differentiate between each type, it is displayed in the registry viewer as an unsigned value. To establish the two’s complement value, we must carry out the following calculation:
Convert this to binary:
The MSB is set so we know that the above value will be negative. The next stage is to flip all the bits. This involves changing 1 to 0 and vice versa. This can be achieved quickly using the logical NOT function on a scientific calculator. You must ensure that it is set to deal with the correct number of bits.
Add 1 bit to the value above:
And then convert that value back to decimal, remembering that we are dealing with a negative number:
If the MSB had been zero, then the value would have been positive. With a positive value, just convert it directly to decimal. When using a scientific calculator using the logical NOT operator, ensure you are dealing with DWORD (32 bits).
Examination of the Bias values in our example indicates that DST is active and the local time for that zone is 3 hours ahead of UTC (see Table 1).
Current local time is 3 hours ahead of UTC (shows DST active)
2 hours ahead of UTC during Standard Time
1 hour ahead of Standard Time when DST active
No change for Standard Time