Windows 7 to Windows 10 Fall Creators Update (1709) In-Place Upgrade Fails with error 0xC1900204 (Invalid Sku)

We have built an SCCM In-Place upgrade task sequence to migrate our enterprise from Windows 7 Enterprise to Windows 10 Enterprise. We have been using the same basic TS for over a year without issues. With the release of Windows 10 Fall Creators Update (1709), we began having issues upgrading certain devices and were seeing error code 0xC1900204, indicating Invalid SKU.

Windows setup looks at the existing OS, install media and the command line image number to validate that the existing and desired versions are a match and can be upgraded. The new multi-version install media that came with Windows 10 Fall Creators requires more steps (behind the scenes) to make the match and seems to have issues with some systems. I’m not sure how relevant this is, but we are using KMS keys for all of our devices.

Let’s take a look at the setupact.log from a failed client to see some snippets of these steps.

Here we can see the command line that is dynamically generated from the Upgrade Operating System step in your TS (See image at the bottom of this post).

1
2
2017-12-14 16:32:31, Info MOUPG SetupHost::Initialize: CmdLine = [/Install /Media /Quiet /InstallFile "C:\_SMSTaskSequence\Packages\XXXXXXXX\Sources\Install.wim" "/ImageIndex" "3" "/auto" "Upgrade" "/noreboot" /MediaPath "C:\_SMSTaskSequence\Packages\XXXXXXXX"]
2017-12-14 16:32:55, Info MOUPG ImageExit: Initializing Mode: [2]

The existing OS is Windows 7 Enterprise.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
2017-12-14 16:32:31, Info MOUPG SetupHost: Setup build version is: 10.0.16299.15 (rs3_release.170928-1534)
2017-12-14 16:32:31, Info CONX Host OS version: 6.1.7601.1130 Service Pack 1 (1.0) Platform 0x2, SuiteMask 0x100, ProdType 0x1
2017-12-14 16:32:31, Info CONX Source OS: Host SKU Info: Edition = 'Enterprise', Edition Type = 'Client', Installation Type = 'Complete', Product Name = 'Windows 7 Enterprise', Arch = amd64, StationType = Client Workstation, Stage type = Staged Image
2017-12-14 16:32:31, Info MOUPG Host OS License State [ Genuine ]
2017-12-14 16:32:31, Info MOUPG Host OS Architecture [ x64 ]
2017-12-14 16:32:31, Info MOUPG Host OS Language Id [ 1033 ]
2017-12-14 16:32:31, Info MOUPG User UI Language Id [ 1033 ]
2017-12-14 16:32:31, Info MOUPG Host OS Edition [ Enterprise ]
2017-12-14 16:32:31, Info MOUPG Host OS Version [ 6.1.7601 ]
2017-12-14 16:32:31, Info MOUPG Host OS Build String [ 7601.23915.amd64fre.win7sp1_ldr.170913-0600 ]

Here, the installer loops through the image indexes to find the one that matches the index specified in the setup command line.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
2017-12-14 16:32:31, Info                  MOUPG  SetupManager: Install file found: [C:\_SMSTaskSequence\Packages\XXXXXXXX\Sources\Install.wim]
2017-12-14 16:32:31, Info                  MOUPG      WIM Path        [ C:\_SMSTaskSequence\Packages\XXXXXXXX\Sources\Install.wim ]
2017-12-14 16:32:31, Info                  MOUPG      Image Count     [ 6 ]
2017-12-14 16:32:31, Info                  MOUPG      Install Count   [ 6 ]
2017-12-14 16:32:31, Info                  MOUPG      WinPE Count     [ 0 ]
2017-12-14 16:32:31, Info                  MOUPG  -------------------------
2017-12-14 16:32:31, Info                  MOUPG      Install Index   [ 1 ]
2017-12-14 16:32:31, Info                  MOUPG      Product Name    [ Microsoft� Windows� Operating System ]
2017-12-14 16:32:31, Info                  MOUPG      Version         [ 10.0.16299 (15.0) ]
2017-12-14 16:32:31, Info                  MOUPG      Architecture    [ x64 ]
2017-12-14 16:32:31, Info                  MOUPG      Edition         [ Education ]
2017-12-14 16:32:31, Info                  MOUPG      Language        [ en-US ]
2017-12-14 16:32:31, Info                  MOUPG  -------------------------
2017-12-14 16:32:31, Info                  MOUPG      Install Index   [ 2 ]
2017-12-14 16:32:31, Info                  MOUPG      Product Name    [ Microsoft� Windows� Operating System ]
2017-12-14 16:32:31, Info                  MOUPG      Version         [ 10.0.16299 (15.0) ]
2017-12-14 16:32:31, Info                  MOUPG      Architecture    [ x64 ]
2017-12-14 16:32:31, Info                  MOUPG      Edition         [ EducationN ]
2017-12-14 16:32:31, Info                  MOUPG      Language        [ en-US ]
2017-12-14 16:32:31, Info                  MOUPG  -------------------------
2017-12-14 16:32:31, Info                  MOUPG      Install Index   [ 3 ]
2017-12-14 16:32:31, Info                  MOUPG      Product Name    [ Microsoft� Windows� Operating System ]
2017-12-14 16:32:31, Info                  MOUPG      Version         [ 10.0.16299 (15.0) ]
2017-12-14 16:32:31, Info                  MOUPG      Architecture    [ x64 ]
2017-12-14 16:32:31, Info                  MOUPG      Edition         [ Enterprise ]
2017-12-14 16:32:31, Info                  MOUPG      Language        [ en-US ]
2017-12-14 16:32:31, Info                  MOUPG  -------------------------
2017-12-14 16:32:31, Info                  MOUPG      Install Index   [ 4 ]
2017-12-14 16:32:31, Info                  MOUPG      Product Name    [ Microsoft� Windows� Operating System ]
2017-12-14 16:32:31, Info                  MOUPG      Version         [ 10.0.16299 (15.0) ]
2017-12-14 16:32:31, Info                  MOUPG      Architecture    [ x64 ]
2017-12-14 16:32:31, Info                  MOUPG      Edition         [ EnterpriseN ]
2017-12-14 16:32:31, Info                  MOUPG      Language        [ en-US ]
2017-12-14 16:32:31, Info                  MOUPG  -------------------------
2017-12-14 16:32:31, Info                  MOUPG      Install Index   [ 5 ]
2017-12-14 16:32:31, Info                  MOUPG      Product Name    [ Microsoft� Windows� Operating System ]
2017-12-14 16:32:31, Info                  MOUPG      Version         [ 10.0.16299 (15.0) ]
2017-12-14 16:32:31, Info                  MOUPG      Architecture    [ x64 ]
2017-12-14 16:32:31, Info                  MOUPG      Edition         [ Professional ]
2017-12-14 16:32:31, Info                  MOUPG      Language        [ en-US ]
2017-12-14 16:32:31, Info                  MOUPG  -------------------------
2017-12-14 16:32:31, Info                  MOUPG      Install Index   [ 6 ]
2017-12-14 16:32:31, Info                  MOUPG      Product Name    [ Microsoft� Windows� Operating System ]
2017-12-14 16:32:31, Info                  MOUPG      Version         [ 10.0.16299 (15.0) ]
2017-12-14 16:32:31, Info                  MOUPG      Architecture    [ x64 ]
2017-12-14 16:32:31, Info                  MOUPG      Edition         [ ProfessionalN ]
2017-12-14 16:32:31, Info                  MOUPG      Language        [ en-US ]```

Finally, we get to the part where we can see the issue.

```ini
2017-12-14 16:32:35, Info                  MOUPG  ProductKey: Product key found in Host OS.
2017-12-14 16:32:35, Info                  MOUPG  ProductKey: Populating Image info set.
2017-12-14 16:32:36, Info                  MOUPG  Action progress: [0%]
2017-12-14 16:32:36, Info                  MOUPG  Setup SubPhase: [5]
2017-12-14 16:32:42, Info                         SPValidateProductKey: Calling PidGenX
2017-12-14 16:32:43, Error                        CallPidGenX: PidGenX function failed on this product key. (hr = 0x8a010101)
2017-12-14 16:32:43, Warning                      SPValidateProductKey: Failed to call PidGenX to validate product key
2017-12-14 16:32:43, Error                 MOUPG  CDlpActionProductKeyValidate::ReportDownlevelInstallChannel(2975): Result = 0x8A010101
2017-12-14 16:32:43, Error                 MOUPG  ProductKey: Failed to report Host OS channel to telemetry.
2017-12-14 16:32:43, Info                  MOUPG  ProductKey: Calling GatherOSState to generate GenuineTicket.xml
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: GatherOsState Process returned   : [0x0]
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Is Machine Active                : [TRUE]
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Genuine ticket generated         : [TRUE]
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Offer Default.
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Offer = [TRUE].
2017-12-14 16:32:52, Info                  MOUPG  GetProductKeyFromResponse: Attempting to get a product key from the response layer.
2017-12-14 16:32:52, Info                  MOUPG  GetProductKeyFromResponse: Using automation response.
2017-12-14 16:32:52, Info                  MOUPG  GetProductKeyFromResponse: Automation response not found.
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Looking for product key in Pid.txt file.
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Pid.txt file not found.
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Looking for product key in Host OS.
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Product key found in Host OS.
2017-12-14 16:32:52, Info                  MOUPG  ProductKey: Validating Product Key for Image.
2017-12-14 16:32:53, Info                         SPValidateProductKey: Calling PidGenX
2017-12-14 16:32:54, Error                        CallPidGenX: PidGenX function failed on this product key. (hr = 0x8a010101)
2017-12-14 16:32:54, Warning                      SPValidateProductKey: Failed to call PidGenX to validate product key
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Product key is invalid.
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Looking for product key in Digital Marker.
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Product key found in Digital Marker.
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Validating Product Key for Image.
2017-12-14 16:32:54, Info                         SPValidateProductKey: Calling PidGenX
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Product key using pkey edition = [Professional].
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Matching Install Wim For Exact Editions
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Matching Install Wim.
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Matching Install Wim: Found [1] matching images.
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Extracting Eula
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Product key was successfully validated.
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Product EditionID = Professional
2017-12-14 16:32:54, Info                  MOUPG  ProductKey: Product InstallChannel = OEM

...

2017-12-14 16:32:55, Info                  MOUPG  Setup SubPhase: [6]
2017-12-14 16:32:55, Info                  MOUPG  MigChoice: Initializing Drive Letter:          [C]
2017-12-14 16:32:55, Info                  MOUPG  MigChoice: Initializing Wim Path:              [C:\_SMSTaskSequence\Packages\XXXXXXXX\Sources\Install.wim]
2017-12-14 16:32:55, Info                  MOUPG  MigChoice: Initializing Image Index:           [5]
2017-12-14 16:32:55, Info                  MOUPG  MigChoice: Initializing Image Name:            [Windows 10 Pro]
2017-12-14 16:32:55, Info                  MOUPG  MigChoice: Initializing Wim Ref Count:         [0]
2017-12-14 16:32:55, Info                  MOUPG  ProgressHandlerAction: Sending initial progress message for action [5].
2017-12-14 16:32:55, Warning               MOUPG  CSetupDiagnostics::ReportData - Not reporting WINDLP data point [0x2002]
2017-12-14 16:32:55, Info                  MOUPG  CompatMigrationChoice: Entering Execute Method
2017-12-14 16:32:55, Info                  MOUPG  CDlpActionCompat::ExecuteMigChoiceScan: Enter
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Edition = [Professional]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Product Name = [Microsoft� Windows� Operating System]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Language = [en-US]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Architecture = [amd64]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Version = [10.0.16299.0]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: SPVersion = [15.0]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Detected Source Edition = [Enterprise]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Detected Source Arch = [amd64]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Detected Source Version = [6.1.7601.0]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Detected Source SPVersion = [1.0]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: UpgradeFlags = [0x10003]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Detected Source DomainName = [XX]
2017-12-14 16:32:55, Info                  MOUPG  Target OS: Detected Source DomainJoined = [Yes]

...

2017-12-14 16:32:56, Error                 MOUPG  CSetupHost::Execute(375): Result = 0xC1900204

After digging through this for a bit, I learned some things that I didn’t know. The PidGenX and Digital Marker lines are where I found the root of the problem. I honestly could not find any real useful information about PidGenX, but I believe that it’s a product ID checking utility. For some reason it fails. As I mentioned before, we are using a KMS key, so it’s possible that it has issues communicating to my KMS server, but I’m just not sure.

The Digital Marker on the other hand refers to the OEM SLP in the MSDM ACPI table in UEFI, or the System Locked Preinstallation (SLP) key in the Microsoft Digital Marker (MSDM) in the Advanced Configuration and Power Interface (ACPI) table embedded in the Unified Extensive Firmware Interface (UEFI).

Once I started looking in the right place, I was able to find the Digital Marker on my devices using a tool called RWEvertything with the assistance of this post. I confirmed that my machines all had OEM Professional SLP keys instead of Enterprise (also, it said it on the sticker on the outside of the machine!!).

A Square Dozen Image

From there, I contacted Microsoft Premier Support and they suggested adding the KMS key to the Product key field in my TS using the correct KMS key from Microsoft here.

Once I added the KMS key in, the upgrades started working again. While the workaround fixed the issue, I’m just not sure if this is a bug, underlying issue with my environment or just Gremlins. It would be great to know someday.