Windows 11 in-place upgrade content

Have you confirmed that they are actually compatible? We aren’t sure WhyNotWin11 is actually correct in this regard based upon some deeper analysis of their logic. It definitely has some flaws.

This check is quite weird and requires some CPU name enumeration that is hard or checking if the CPU is newer than the known list of CPUs.

WhyNotWin11 is also not accurate in some ways. Microsoft’s own compatibility checker also disagrees sometimes, and yet I have found WhyNotWin11 to be more accurate in others. It is very strange.

The point is not for the BigFix report to be perfectly accurate, it is instead to identify all systems that may require further investigation and work.


This will get the minimum or maximum of each value across all GPUs:

Q: /* correct WDDM max */ maxima of (it as trimmed string as version) of lines containing "Driver Model:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client
A: 2.7
T: 39.592 ms
I: plural version

Q: /* correct WDDM min */ minima of (it as trimmed string as version) of lines containing "Driver Model:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client
A: 2.7
T: 29.836 ms
I: plural version

Q: /* correct DDI Version min */ minima of (it as trimmed string as version) of lines containing "DDI Version:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client
A: 12
T: 20.177 ms
I: plural version

Q: /* correct Feature Levels Version min */ minima of ( maxima of (it as version) of (concatenations "." of substrings separated by "_" of it) of (it as trimmed string) of substrings separated by "," of following texts of firsts "Feature Levels:" of it) of lines containing "Feature Levels:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client
A: 12.1
T: 10.025 ms
I: plural version

We think that if ANY GPU does not meet the minimum for WDDM or DDI Version or Feature Level, then it is a possible failure condition for Win11 compatibility.

This should be the more accurate relevance:

Q: if not ( (exists minima whose(it < "12") of (it as trimmed string as version) of lines containing "DirectX Version:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client) OR (exists minima whose(it < "2.0") of (it as trimmed string as version) of lines containing "Driver Model:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client) OR (exists minima whose(it < "12") of (it as trimmed string as version) of lines containing "DDI Version:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client) OR (exists minima whose(it < "12") of ( maxima of (it as version) of (concatenations "." of substrings separated by "_" of it) of (it as trimmed string) of substrings separated by "," of following texts of firsts "Feature Levels:" of it) of lines containing "Feature Levels:" of files "win11-eligibility\dxdiag.txt" of parent folders of data folders of client) ) then "PASS" else "FAIL"
A: PASS
T: 28.714 ms
I: singular string

NOTE: This will likely report MORE failures than our current analysis, not less.

1 Like

Microsoft has a Powershell script that seems to do the trick. It would be good to use this Powershell script for the Windows 11 eligibility analysis rather than using dxdiag.

1 Like

But it is unclear to me how the dxdiag results are incorrect if all GPUs must be compliant for Win11 compatibility. Is there documentation that states that only a single GPU must be compliant for the entire machine to be Win11 compatible even if other GPUs are not?

The goal is not to determine compatibility perfectly, the goal is to identify all computers that MIGHT have issues that need investigated and resolved. It is much better to have false negatives (computers that are actually compatible but report that they are not) then falso positives (computers that are actually NOT compatible but report that they are)

Here is the output from the Powershell script published by Microsoft for Windows 11 Eligibility. Does anyone have an analysis written for this?

System Passes
{“returnCode”:0,“returnReason”:"",“logging”:"Storage: OSDiskSize=922GB. PASS; Memory: System_Memory=16GB. PASS; TPM: TPMVersion=2.0, 0, 1.38. PASS; Processor: {AddressWidth=64; MaxClockSpeed=2304; NumberOfLogicalCores=8; Manufacturer=GenuineIntel; Caption=Intel64 Family 6 Model 142 Stepping 12; }. PASS; SecureBoot: Capable. PASS; ",“returnResult”:“CAPABLE”}

System Fails
{“returnCode”:1,“returnReason”:"Processor, ",“logging”:"Storage: OSDiskSize=922GB. PASS; Memory: System_Memory=16GB. PASS; TPM: TPMVersion=2.0, 0, 1.16. PASS; Processor: {AddressWidth=64; MaxClockSpeed=2808; NumberOfLogicalCores=8; Manufacturer=GenuineIntel; Caption=Intel64 Family 6 Model 94 Stepping 3; }. FAIL; SecureBoot: Capable. PASS; ",“returnResult”:“NOT CAPABLE”}

1 Like

That should be easy enough to parse with the JSON inspectors…but I find it concerning they don’t seem to test the video card at all?

1 Like

Yeah, that seems less accurate if the GPU isn’t being tested at all.

It is easy to test everything except for the GPU with basic commands or WMI calls. It is the GPU test that I haven’t seen anything better than using dxdiag to get the info, though it should be possible to get that info with some windows APIs directly using some kind of compiled code.

It seems like the only thing the Microsoft Powershell provides is a bit more clarity around CPU model compatibility but I haven’t looked into it’s logic to see if that is actually the case, but it lacks GPU compatibility check, so it is lacking in that regard.

From my perspective, we should update the GPU check so that it fails MORE systems based upon the improved relevance above.

We could also improve the CPU model check so it fails MORE systems that don’t meet the minimums there.

I don’t see any improvements that would cause more systems to PASS, only more systems to FAIL, and that is really the point, to only PASS systems that are clearly a PASS and FAIL the rest so they can be investigated and mitigated if possible.


So looking further into the Microsoft Powershell script. It does NOT actually look at a list of supported CPUs, instead it examines some specific details about the CPUs to see if they are compatible or not and assumes forward compatibility, which makes sense. WhyNotWin11 uses a hybrid approach.

That said, the script actually handles 3 edge cases.

$supportedDevices = @('surface studio 2', 'precision 5520')

and:

if ($cpuDetails.Name -match 'i7-7820hq cpu @ 2.90ghz')