Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Product key
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==== Product key ==== The Product key takes the form as XXXXX-XXXXX-XXXXX-XXXXX-XXXXX. Each character is one of the following 24 letters and digits: B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 The 25 characters of the Product Key form a base-24 encoding of the binary representation of the Product Key. The Product Key is a multi-precision integer of roughly 115 bits, which is stored in little endian byte order in an array of 15 bytes. Of these 15 bytes the least significant four bytes contain the Raw Product Key in little endian byte order. The least significant bit is removed by shifting this 32-bit value to the left by one bit position. The eleven remaining bytes form a digital signature, allowing verification of the authenticity of the Product Key by means of a hard-coded public key. To obtain the CCCCCCC component, a check digit is appended, and the check digit that is chosen such that the sum of all digits, including the check digit, is divisible by seven. For verifying a Product Key, more than one [[Public-key cryptography|public key]] is available. If verification with the first public key fails, the second is tried, etc. The DD component of the Product ID specifies which of the public keys in this sequence was successfully used to verify the Product Key. ===== Hardware information bit-fields ===== The hardware configuration linked to the Installation ID is represented by the two double words H1 and H2. For this purpose, the double words are divided into twelve bit-fields. {| class="wikitable" |+ !Double Word !Offset !Length !Bit-Field-value based on |- |H1 |0 |10 |Volume serial number string of system volume |- |H1 |10 |10 |Network adapter [[MAC address]] string |- |H1 |20 |7 |CD-ROM drive hardware identification string |- |H1 |27 |5 |Graphics adapter hardware identification string |- |H2 |0 |3 |Unused, set to 001 |- |H2 |3 |6 |CPU serial number string |- |H2 |9 |7 |Hard drive hardware identification string |- |H2 |16 |5 |[[SCSI]] host adapter hardware identification string |- |H2 |21 |4 |[[Parallel ATA#IDE and ATA-1|IDE]] controller hardware identification string |- |H2 |25 |3 |Processor model string |- |H2 |28 |3 |[[Random-access memory|RAM]] size |- |H2 |31 |1 |1 = dockable, 0 = not dockable |} If [[Docking station|docking]] is possible, the activation mechanism will be more tolerant with respect to future hardware modifications. If the hardware component corresponding to one of the remaining ten bit-fields is present, the respective bit-field contains a non-zero value describing the component. A value of zero marks the hardware component as not present. All hardware components are identified by a hardware identification string obtained from the registry. [[Hashing algorithm|Hashing]] this string provides the value for the corresponding bit-field. ===== 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 <math>Hash = (Hash % BitFieldMax) + 1</math>. 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 from the other bit-fields as shown in the table. {| class="wikitable" |+ !Value !Amount of RAM possible |- |0 |(bit-field is unused) |- |1 |Below 32 MB |- |2 |between 32 MB and 63 MB |- |3 |Between 64 MB and 127 MB |- |4 |Between 128 MB and 255 MB |- |5 |Between 256 MB and 511 MB |- |6 |Between 512 MB and 1023 MB |- |7 |Above 1023 MB |} 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 MB of RAM would typically be classified as "between 64 MB and 127 MB".
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)