How can I determine the version of Windows XP from a product key?

Very often I must perform a repair install or clean install of Windows XP without knowing which version it is. Obviously, I know if it is Home or Pro or MCE2002 or MCE2005, but I often don't know if it is OEM, retail, corporate (open license), or a special Dell/HP/Sony-specific one that I occasionally encounter. If the XP sticker is on the computer it's usually OEM, but otherwise I don't know how to tell which version it is. If I use the wrong version of Home or Pro to perform a repair install or clean install, then obviously the product key doesn't work with that installation. How can one tell, from the product key or otherwise, EXACTLY which version of XP is installed on a machine?

Who is Participating?
jss1199Connect With a Mentor Commented:

If you right click "My Computer" and select "Properties" you will notice a code that looks like xxxxx-xxx-xxxxxxx-xxxxx in the "Registered to:" section - this is the product key and can tell you the SKU and channel (e.g., if it is Pro, Home, Upgrade, OEM, SLP, VLK, etc.) The first block is your SKU, the second is your channel.

For example, a 55274 at the start means you are XP Pro. 55277 is Home. 76487 is MediaCenter 2005. For the second set of numbers, OEM is .. well.. OEM. 335 is Retail. 640 is VLK.  See list of known SKU and Channels below.

55274 : XP Pro generic OEM
55276 : XP Pro (upgrade)
55276 : XP Home (?)
55277 : XP Home generic OEM
55285 : XP Pro
55661 : XP Pro (retail)
76475 : XP Home (upgrade) (?)
76477 : XP Home Royalty OEM
76481 : XP Pro Dell OEM
76487 : XP Media Center Edition 2005
76487 : XP Pro Royalty OEM
76487 : XP Pro SP2 (retail)
76487 : XP Pro volume license (with '640' channel ID)
76500 : XP MCE 2005 (which is XP Pro with no domain capability)
76588 : XP Pro x64 OEM

000 : Other (includes some retail, upgrade and evaluation versions)
006 : MS or Partner promotions ("Go Pro" Promotion)
007 : FIXME : Retail
009 : Not for resale - bundle
011 : Upgrade (XP Home?)
083 : Windows Genuine Advantage
OEM : OEM (This does not specify royalty or normal OEM)
270 : Volume License
296 : MSDN
308/347 : Microsoft Action Pack subscription
335 : Retail
640 through 652 : Volume License (usually generated via 270 CID in setupp.ini)
699 : Volume Windows XP Tablet Edition
071 : FIXME : Unknown.
Go to start->run->winver.exe
Forgot to add this:

You can right click My Computer, go to properties, and it should tell you if the version of XP is Home or Pro

This might also help:
Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

This may also help deciphering the Product ID
NRTCFAuthor Commented:
Perfect, jss1199! Is there any way to discern this if I cannot login to the computer? For example if the hard drive is dying and all I can do is plug the hard drive into another computer and browse the contents?
mrmarkfuryConnect With a Mentor Commented:
Use this:

Navigate to the program in the command line (Start->Run->cmd) and type the following:
produkey.exe /regfile "D:\WINDOWS\system32\config\software"
Change D: with the slave drives letter
☠ MASQ ☠Connect With a Mentor Commented:
You could slave the HDD of the machine you are repairing to another PC and then use Regedit to load the hive from the slave's HKLM (Don't forget to unload when you've finished!) You'll find the Windows Product Key at:

jss1199Connect With a Mentor Commented:
In that case, the registry is your best bet as another poster commented.
If the computer is alive, you can run the below code.  Easily modifiable to pull from a remote machine.

' NAME: GetCDKeyandSerialNumber.vbs
' AUTHOR: Mark D. MacLachlan , The Spider's Parlor
' URL:
' DATE  : 3/16/2006
' (C) 2006, All Rights Reserved
Set WshShell = CreateObject("wscript.Shell")
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set env = WshShell.environment("Process")
strComputer = env.Item("Computername")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Const HKEY_LOCAL_MACHINE = &H80000002
Const UnInstPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strDigitalProductId="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
    report = report &  "Original CD Key:"& strXPKey & vbCrLf
    report = report &  "SerialNumber: " & objItem.SerialNumber & vbCrLf
MsgBox report
Function GetKey(rpk)
Const rpkOffset=52:i=28
Do 'Rep1
dwAccumulator=0 : j=14
  rpk(j+rpkOffset)=(dwAccumulator\24) and 255  
  dwAccumulator=dwAccumulator Mod 24
  Loop While j>=0
i=i-1 : szProductKey=mid(szPossibleChars,dwAccumulator+1,1)&szProductKey
  if (((29-i) Mod 6)=0) and (i<>-1) then
  i=i-1 : szProductKey="-"&szProductKey
  End If
Loop While i>=0 'Goto Rep1
End Function

Open in new window

All Courses

From novice to tech pro — start learning today.