First things first: As expected, the SKU vs. Edition distinction that I called out in part 1 was somewhat contentious with some people. I used the terms somewhat interchangeably through the article. The “most correct” term would be “edition” but “SKU” is well understood (and not just by Microsoft people). Even Microsoft documentation is inconsistent on this:
- OperatingSystemSKU Enum from the PowerShell SDK uses “SKU,” not “edition.”
- OperatingSystemSKU from the WMI Win32_OperatingSystem class also uses “SKU,” not “edition.”
- Windows 10 edition upgrade documentation uses both “edition” and “SKU” in the same article.
- Windows IoT Licensing & Usage documentation uses “SKU.”
- Windows 10 in S Mode talks about how it replaced the original Windows 10 S “SKU.”
You get the picture — as long as you don’t get too hung up on the slightly-incorrect usage of “SKU” and realize that it’s just the “edition” of Windows that you are running, you’ll be fine.
But what I want to focus on in this article is something that will use yet another term for the same thing: the product type. If you look at the GetProductInfo API call documentation, you can see that it returns details about the OS edition (a.k.a. the SKU) in the pdwReturnedProductType field. That’s similar to the OperatingSystemSKU fields mentioned in the PowerShell SDK and WMI class docs above, although as is often the case with Microsoft docs, you will see a different list of OSes in each place — and none of the lists are complete. So where’s the “master list”? It’s in the Windows SDK files, more specifically the “winnt.h” file, which also (not surprisingly) uses “product type” values:
This file lists every Windows edition (SKU) ever created, including some that were never released. While I suppose it’s possible that some entries have been deleted from the list, I don’t know of any examples where that has happened. It’s also possible that there are new values not yet visible in the latest SDK release, which at this time is the 10.0.20344 SDK release.
So the real exercise is to map the SKU values in the winnt.h product list to the editions (SKUs) from the previous blog, then look at the resulting list to see which aren’t represented, which would mean that they aren’t covered in the Wikipedia blog posts that I was pulling from (which in turn represent “official” SKUs). Some of these do exist, while others represent a “graveyard” of Windows editions that could have been.
#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
Hmm, I don’t recall seeing any “Medium Business Server.” But given its place in the numerical sequence, this was quite some time ago.
#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
#define PRODUCT_STANDARD_SERVER_V 0x00000024
#define PRODUCT_DATACENTER_SERVER_V 0x00000025
#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
No idea what these “V” SKUs are all about. Maybe tied to virtualization?
#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
Looks like more SBS-like SKUs (still not sure if they were ever released).
#define PRODUCT_HOME_BASIC_E 0x00000043
#define PRODUCT_HOME_PREMIUM_E 0x00000044
#define PRODUCT_PROFESSIONAL_E 0x00000045
#define PRODUCT_ENTERPRISE_E 0x00000046
#define PRODUCT_ULTIMATE_E 0x00000047
These I at least remember: They were editions (SKUs) of Windows 7 created in response to the European Union’s Internet Explorer complaint. They remove Internet Explorer from the OS, which broke various things. And as with the G and K SKUs, they were the same cost as the non-E SKUs, so no one really wanted them. (Best of intentions…)
#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
This is one that I thought should have caught on: Multipoint Server. The idea was that you could have one PC with one or more video cards in it, driving multiple sets of keyboards, mice, and monitors. VDI and thin clients ended up winning out, and these slowly faded away.
#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
You can’t forget about the evaluation editions, which are still available. While you can’t turn Windows 10 Enterprise Evaluation into a full release, you can do that with the server editions (SKUs).
#define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055
#define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056
#define PRODUCT_EMBEDDED_A 0x00000058
#define PRODUCT_EMBEDDED_INDUSTRY 0x00000059
#define PRODUCT_EMBEDDED_E 0x0000005A
#define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B
#define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C
#define PRODUCT_CONNECTED_CAR 0x00000075
#define PRODUCT_INDUSTRY_HANDHELD 0x00000076
There have been a variety of Embedded variations, including for automobiles.
#define PRODUCT_CORE_CONNECTED 0x0000006F
#define PRODUCT_CORE_CONNECTED_N 0x00000071
#define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
#define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074
“Core Connected” SKUs came out around the time of Windows 8.1 I believe. They were similar to Windows 8 (Core) but were designed to run in more of a “cloud-only” environment. Maybe a little before their time?
#define PRODUCT_PPI_PRO 0x00000077
Before there was Surface Hub, there was Perceptive Pixel (PPI), the company that Microsoft bought. These ran a variation on Windows (8.1?) Professional, similar in some ways to the Windows 10 Team SKU that took its place.
#define PRODUCT_ARM64_SERVER 0x00000078
From the assigned number, this one has been around for a while, even though it’s not yet been released. But I believe this will be released at some point. If you’re wondering where ARM64 is likely to succeed first, it’s most likely in the server space (as Amazon has already found out), not in the desktop space (unless you’re Apple).
#define PRODUCT_ENTERPRISE_S 0x0000007D
#define PRODUCT_ENTERPRISE_S_N 0x0000007E
#define PRODUCT_PROFESSIONAL_S 0x0000007F
#define PRODUCT_PROFESSIONAL_S_N 0x00000080
#define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
#define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
The “_S” SKUs are the Long-Term Servicing Channel (Branch) releases. As you can see, there were some thoughts initially about having an LTSB/LTSC release for Windows 10 Pro. Fortunately (well, at least I thought it was fortunate), that never happened.
#define PRODUCT_HOLOGRAPHIC 0x00000087
#define PRODUCT_HOLOGRAPHIC_BUSINESS 0x00000088
Hololens devices have their own OS, the only OS to be released (so far?) based on the Windows Core OS, capable of running on UWP apps, not Win32. The “Business” edition added MDM, Azure AD Join, etc. features. (I initially forgot these in the previous post, will get them added shortly.)
#define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C
#define PRODUCT_UTILITY_VM 0x00000095
#define PRODUCT_AZURE_SERVER_CORE 0x000000A8
#define PRODUCT_AZURE_NANO_SERVER 0x000000A9
#define PRODUCT_AZURESTACKHCI_SERVER_CORE 0x00000196
#define PRODUCT_DATACENTER_SERVER_AZURE_EDITION 0x00000197
#define PRODUCT_DATACENTER_SERVER_CORE_AZURE_EDITION 0x00000198
Plenty of Azure-focused VMs (with the last few showing up in the news a few weeks back).
#define PRODUCT_XBOX_SYSTEMOS 0x000000C0
#define PRODUCT_XBOX_NATIVEOS 0x000000C1
#define PRODUCT_XBOX_GAMEOS 0x000000C2
#define PRODUCT_XBOX_ERAOS 0x000000C3
#define PRODUCT_XBOX_DURANGOHOSTOS 0x000000C4
#define PRODUCT_XBOX_SCARLETTHOSTOS 0x000000C5
Xbox devices run their own Windows variants.
#define PRODUCT_CLOUD 0x000000B2
#define PRODUCT_CLOUDN 0x000000B3
#define PRODUCT_CLOUDE 0x000000B7
#define PRODUCT_CLOUDEN 0x000000BA
Initially I thought these were yet another take on a Windows “Cloud” release, but no, these are actually Windows 10 S (before it became S Mode).
#define PRODUCT_LITE 0x000000BD
I would consider this to be Windows 10x (RIP?), another Windows Core OS-based OS release that was first for low-cost devices, then dual-screen devices, then single-screen thin client devices, then “de-emphasized.” Will it ever return? Who knows.
See any other OSes in that list that you didn’t recognize? It is quite the list. Imagine what the diagram in the last post would look like if you added all of those variations into the mix. I have no great desire to tackle that at the moment, maybe some day when I’m bored…
Categories: Windows 10
Sorry if this is out of context, but I wasn’t sure how to message you. I read and implemented DaRT in to our MDT boot image following your post here:
Unfortunately when we launch DaRT in WinPE many of the tools aren’t available and say “this tool requires a supported offline OS”.
Do you know how to point DaRT to the offline OS that MDT installed? I haven’t been any to find much online about this.