Inside Windows Product Activation

Hashing

The hash result is obtained by feeding the hardware identification string into the MD5 message digest algorithm and picking the number of bits required for a bit-field from predetermined locations in the resulting message digest. Different predetermined locations are used for different bit-fields. In addition, a hash result of zero is avoided by calculating

Hash = (Hash % BitFieldMax) + 1

where BitFieldMax is the maximal value that may be stored in the bit-field in question, e.g. 1023 for a 10-bit bit-field, and 'x % y' denotes the remainder of the division of x by y. This results in values between 1 and BitFieldMax. The obtained value is then stored in the respective bit-field.

RAM bit-field

The bit-field related to the amount of RAM available to the operating system is calculated differently. The seven valid values specify the approximate amount of available RAM as documented in the following table.

Value

amount of RAM available

0

(bit-field unused)

1

below 32 MByte

2

between 32 MByte and 63 MByte

3

between 64 MByte and 127 MByte

4

between 128 MByte and 255 MByte

5

between 256 MByte and 511 MByte

6

between 512 MByte and 1023 MByte

7

above 1023 MByte

It is important to note that the amount of RAM is retrieved by calling the GlobalMemoryStatus() function, which reports a few hundred kilobytes less than the amount of RAM physically installed. So, 128 MByte of RAM would typically be classified as "between 64 MByte and 127 MByte ".