Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Detailed CPU and UEFI capability checks for virtualization #324

Open
verdy-p opened this issue Jul 2, 2021 · 10 comments
Open

Detailed CPU and UEFI capability checks for virtualization #324

verdy-p opened this issue Jul 2, 2021 · 10 comments
Assignees
Labels
checks Check improvement or new check. PRO To be included in Enterprise Edition

Comments

@verdy-p
Copy link

verdy-p commented Jul 2, 2021

Please detail the CPU capacilities that are required or strongly suggested, notably for virtualization, at least for information, because they are not easy to find and check :

  • SLAT
  • support of large pages (more than 4KB, possibly more than 1MB)
  • 5-layers page translation (recent CPUs, still not used in Windows 10)
  • extended physical addressing space (more than 36 bits in 64-bit mode, and more than 48 bit of virtual space)
  • support of extended 64-bit pointers in small pages
  • Intel VT-x, Intel TXT (LT) : Microsoft dropped the Win10 support of TXT, keeping only VT-x for HVCI
  • Credential Guard
  • NX protection inside the UEFI preboot environment during measurements in the UEFI firmware Windows pre-boot image (not just when the standard boot loader will be launched)
  • Driver Guard
  • HSTI (not clearly explained by Microsoft or manufacturers, never exposed to final customers by hardware sellers)
  • MOR (not clearly explained by Microsoft or manufacturers, never exposed to final customers by hardware sellers)
  • SMM mitigation (not clearly explained by Microsoft or manufacturers, never exposed to final customers by hardware sellers)
  • MDAG (part of Windows Defender) has lower requirements than HVCI which requires full virtualization
  • DDA requirements for drivers (dynamic assignement of PCI resources, enforcing the use of the IOMMU to allow devices to be virtualized and remapped with separate isolated intances and enforce DMA protection). On Intel, this is calls "VT-d" and must be enabled in UEFI BIO settings (using secure boot, or UEFI boot mode, with CSM/legacy boot mode disabled, are not enough).
  • As well as other mitigations proposed by CPU makers in their supported microfirmware (since the "bleeding attacks", there are more and more side channels discovered, some are patchable, some require disabling some CPU features with some impact on performance, but this should not block running Windows, given today's performances of most PCs that pass most of their time waiting with several cores left idle in low power mode and waking up rapidly)
  • Mitigations proposed for other devices (notably bus adapters and bridges, or inside the loadable of many firmware microcontrolers for system management, including power management and external memory caches, DMA and interrupt controlers)

A power shell script by Microsoft does all these checks (and a few more) in a convenient command line tool:

https://docs.microsoft.com/fr-fr/windows/security/identity-protection/credential-guard/dg-readiness-tool

This tool (initially made in its version 3.6 for Windows 10) has very recently be updated on June 1 with a new version with additional compliance checks, and methods to check the capabiltiies, or to attempt to enable them in Windows and in the UEFI environment.

We can expect this tool to be updated once again: Microsoft has created a lot of confusion with the win11 announcements, and its self-contradicting documents that are silently modified after the fact (Microsoft Corp can blame Microsoft China for this nightmare, and I don't see how Microsoft will avoid delaying the release of Win11 or a severe revision of its announcements; customers arounf the world are already complaining for the lies or absence of preparation and information, and breach in their supprot contract with Microsoft; even customers of the most recent costly Microsoft Surface tablets are not eligible to the upgrade with the current requirements).

Another tool from Sysinternal.com (now owned by Microsoft) can also help, notably "coreinfo.exe" which gives many capabilities of the CPU (but some virtualizations capabilities are not detected if an hypervisor is already running, which forcibly hides and protect them, notably the hardware virtualization support of the native CPU: this is the case also when booting windows in Secure mode; the only way is to try booting windows in unsafe mode in the WinPE recovery environment; change UEFI settings, remove the safeboot mode, then reboot a few times while interrupting it in the middle with the reset button, this should force loading the recovery environment, where you can run the "coreinfo.exe" tool, from an external USB drive with the CMD console). You can also launch the WinPE environment by forcing your PC to boot in unsafe boot from a bootable USB drive containing any Windows installation ISO (don't install it, jsut open the command console in advanced options of the recovery menu)...

How was that possible ? An internal Microsoft suicide to kill Windows or a secret strategy largely benefiting to Chinese PC manufacturers ?

@rcmaehl rcmaehl self-assigned this Jul 2, 2021
@rcmaehl rcmaehl added the enhancement New feature or request label Jul 2, 2021
rcmaehl added a commit that referenced this issue Jul 2, 2021
To Do:
Add Option to Run #324
Add Theme Settings #314,
Add Accessibility Settings #313, #258
Add Language Selector #195
Allow importing languages
Add Translator Credit back in
micwoj92 added a commit to Qazy147/WhyNotWin11 that referenced this issue Jul 2, 2021
commit c5af837
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 17:48:23 2021 -0400

    Create CONTRIBUTING.md

commit 2eef0a9
Merge: eb1b451 dfe3a9e
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 17:15:34 2021 -0400

    Merge pull request rcmaehl#322 from PierreGrillet/refactoring-CPU-check

    Refactor CPU compatibility check code

commit eb1b451
Merge: c632983 8e22b89
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 17:08:28 2021 -0400

    Merge pull request rcmaehl#332 from Qazy147/patch-7

    Update WhyNotWin11.au3

commit c632983
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 22:54:17 2021 +0200

    WhyNotWin11.au3 + Local Const $DPI_RATIO (rcmaehl#348)

    Co-authored-by: Robert C. Maehl <rcmaehl@aol.com>

commit 157f20c
Merge: 2b174e2 9bc4947
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 16:45:02 2021 -0400

    Merge pull request rcmaehl#350 from mlipok/www_whynotwin

    Feature: Open URL "https://www.whynotwin11.org/"

commit 2b174e2
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 22:28:57 2021 +0200

    Au3Check - fix - Local $hJob "already declared" (rcmaehl#346)

commit ae7abc3
Author: micwoj92 <45581170+micwoj92@users.noreply.github.com>
Date:   Fri Jul 2 22:22:10 2021 +0200

    Fix rcmaehl#335

commit d01bd00
Author: micwoj92 <45581170+micwoj92@users.noreply.github.com>
Date:   Fri Jul 2 21:32:48 2021 +0200

    update metadata

commit ac8cbc2
Author: ARAKI Musashi <arakim@users.noreply.github.com>
Date:   Sat Jul 3 04:31:47 2021 +0900

    correct a typo (rcmaehl#342)

commit 9bc4947
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 20:54:07 2021 +0200

    GUICtrlSetCursor for $h_WWW

commit 5b4e4b3
Author: Oleg Chashko <62497891+Oleg-Chashko@users.noreply.github.com>
Date:   Fri Jul 2 20:07:43 2021 +0200

    Update 0419.lang (rcmaehl#344)

    Update metadata, Font sizes, Improved Russian translation

commit 1bdb4f5
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 19:59:21 2021 +0200

    WhyNotWin11.au3 "https://www.whynotwin11.org/"

commit 87dc335
Author: Oleg Chashko <62497891+Oleg-Chashko@users.noreply.github.com>
Date:   Fri Jul 2 19:55:54 2021 +0200

    Update 0422.lang (rcmaehl#343)

    Update Font sizes, Improved Ukrainian translation

commit 8e22b89
Merge: e48dc90 1d103eb
Author: Qazy147 <86588462+Qazy147@users.noreply.github.com>
Date:   Fri Jul 2 18:21:18 2021 +0200

    Merge branch 'rcmaehl:main' into patch-7

commit 1d103eb
Merge: 96c8a7f 1022dbb
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 12:12:45 2021 -0400

    Merge pull request rcmaehl#338 from mlipok/patch-5

    WhyNotWin11.au3 + #AutoIt3Wrapper_Run_AU3Check=Y

commit 96c8a7f
Merge: 7a68f80 3412fc6
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 12:12:12 2021 -0400

    Merge pull request rcmaehl#337 from mlipok/patch-4

    ResourcesEx.au3 - $__WINVER > _WinAPI_GetVersion()

commit 7a68f80
Merge: 81269b9 2437991
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 12:11:48 2021 -0400

    Merge pull request rcmaehl#336 from mlipok/patch-3

    _WMIC.au3 - Au3Check compabliity - _GetTPMInfo

commit 81269b9
Author: micwoj92 <45581170+micwoj92@users.noreply.github.com>
Date:   Fri Jul 2 18:01:22 2021 +0200

    Fix Availabe typo

commit e48dc90
Author: Qazy147 <86588462+Qazy147@users.noreply.github.com>
Date:   Fri Jul 2 13:29:12 2021 +0200

    Update WhyNotWin11.au3

commit dfe3a9e
Author: PierreGrillet <34492324+PierreGrillet@users.noreply.github.com>
Date:   Thu Jul 1 22:40:44 2021 +0200

    Refactor CPU compatibility check code

    Enhancement
    Factorizing GUI code from CPU checking list selection cases. (2/3 shorter)
    Update : Applied Requested Changes by @rcmaehl in rcmaehl#322, merge with main

commit 581f5c1
Author: micwoj92 <45581170+micwoj92@users.noreply.github.com>
Date:   Fri Jul 2 13:12:21 2021 +0200

    Re add translator

     @PierreGrillet seems like one was accidentally removed, you added here rcmaehl#226

commit a24800a
Author: PierreGrillet <34492324+PierreGrillet@users.noreply.github.com>
Date:   Fri Jul 2 13:09:14 2021 +0200

    Update French translation (rcmaehl#323)

    * Update French translation

    - Adding font size (reduce Large to 14)
    - Fix Clipping text
    - Translate CPU and OS

    * [fr-FR] Remove ghost user from translaters

commit 2437991
Merge: 68111b4 9c7c6ed
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 11:41:30 2021 +0200

    Merge branch 'rcmaehl:main' into patch-3

commit 3412fc6
Merge: 4c018e2 9c7c6ed
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 11:32:57 2021 +0200

    Merge branch 'rcmaehl:main' into patch-4

commit 1022dbb
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 11:30:42 2021 +0200

    WhyNotWin11.au3 + #AutoIt3Wrapper_Run_AU3Check=Y

    Also full #AutoIt3Wrapper_Au3Check_Parameters added
    to be sure next PR from other contributors will come with no other problems.

commit 9c7c6ed
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 11:22:36 2021 +0200

    WhyNotWin11.au3 $hModule not declared (rcmaehl#331)

    Fixes "error: $hModule: undeclared global variable."

commit 4c018e2
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 11:21:37 2021 +0200

    ResourcesEx.au3 - $__WINVER > _WinAPI_GetVersion()

    $__WINVER was removed from WinAPIInternals.au3 at 08-04-2018 so is not present in recent beta

commit 68111b4
Author: Michał Lipok <mlipok@users.noreply.github.com>
Date:   Fri Jul 2 11:04:51 2021 +0200

    _WMIC.au3 - Au3Check compabliity - _GetTPMInfo

    fixed duplicated static and move static to top

commit 3c27fe1
Author: Qazy147 <86588462+Qazy147@users.noreply.github.com>
Date:   Fri Jul 2 10:04:42 2021 +0200

    Update WhyNotWin11.au3

    Line 641 overwrites any previous settings.

commit 95639ac
Author: Robert C. Maehl <rcmaehl@aol.com>
Date:   Fri Jul 2 02:59:42 2021 -0400

    Start on Settings Menu

    To Do:
    Add Option to Run rcmaehl#324
    Add Theme Settings rcmaehl#314,
    Add Accessibility Settings rcmaehl#313, rcmaehl#258
    Add Language Selector rcmaehl#195
    Allow importing languages
    Add Translator Credit back in
@ghost
Copy link

ghost commented Jul 4, 2021

Probably requires a seperate screen for advanced users.

@rcmaehl rcmaehl added the checks Check improvement or new check. label Jul 6, 2021
@jesseinsf
Copy link

jesseinsf commented Aug 12, 2021

No need to display a detailed check as many people will not understand a word you are saying. Just have the word "Virtualization" added to the list. The detailed check should be don't like everything is in the list (In the background). And in the description, it should just have name of the BIOS feature name which is enabled.
Example: Intel Virtualization Technology and Intel VT-d/VT-x enabled.

@jgstew

This comment has been minimized.

@rcmaehl
Copy link
Owner

rcmaehl commented Aug 12, 2021

I would also add that DirectX 12 is either not required when running Win11 in HyperV or it is not being detected correctly. WhyNotWin11 says I'm not compatible due to DirectX 12 yet I'm actually running Win11 Insider.

Insider is a LOT less strict about requirements. Additionally, if dxdiag errors out or it's not reported correctly in the first place then this can occur. #58 should fix this

@JohnLGalt
Copy link

Insider is a LOT less strict about requirements. Additionally, if dxdiag errors out or it's not reported correctly in the first place then this can occur. #58 should fix this

Exactly. I wish more people realized that.

@jgstew
Copy link

jgstew commented Aug 13, 2021

My point was less about Insider, more about Hyper-V likely having lesser requirements for running Win11.

@JohnLGalt
Copy link

I think you have to realize that you cannot really say that right now because the only builds we have are Insiders, which have lower requirements all around, so that could be why the requirements seem lower in Hyper-V, VBox, VMWare and other hypervisors.

@verdy-p
Copy link
Author

verdy-p commented Aug 15, 2021

virtualization is almost required in Windows 11 now for many features (even if you don't want to install a guest OS in a VM using the Hyper-V host manager. It is used now for security (VBS, HVCI, MDAG...), or for containers, or for LXSS (which now allows installing any Linux environement with a Microsoft-provided kernel using paravirtualization to use full integration within Windows,but within the context os the currently connected Windows user; distributions are now available in the Microsoft Store); it is used as well for development (e,.g. in Visual Studio, to install an Android emulator, and soon it will be used for running Android apps directly within Windows). The Hyper-V core can also be used to install containers (including Docker); it is also used now inside several graphics accelerators; it is used as well for deploying remotely-adminsitered applications within a sandbox: Windows virtualizes itself.
Support for hardware virtualization is anyway needed even if you boot Windows 11 by disabling Hyper-V in EFI boot parameters), but prefer using another hyper-visor running either as a service in windows or in the context of a local windows user only for his own VMs. Hyper-V also allows another secondary-level hypervisor to run on top of Windows itself in Hyper-V (secondary-level hypervisors however will not control the full hardware: this works for running vmWare on top of Hyper-V, so that you don't need to disable Hyper-V, and many new other Windows services depending on it, to run a VM.
Very soon, Windows 11 will allow booting on something else than Hyper-V, and will be able to control this other "core" hypervisor": other hyperviros are already preparing themselves to offer the needed secure APIs via their "hyper-bus" using a common protocol. This will also be used by Microsoft to improve the hosting of Windops virtual servers inside Azure (which uses large farms of servers already running Linux-based hypervisors, instead of Hyper-V itself on bare-metal
Deeps changes are being developed inside "HAL" and the Windows kernel so that Windows will be more independant of the hypervisor on which it runs. May be these new windows HAL and kernels will not be available on PC only licenced for Windows Home or Pro, only for those with Enterprise or Student or Server E3/E5 licences of Windows.
All modern OSes now want to use virtualization, prefertably with hardware support (notably with multiple cores, the IOMMU, avanced APIC, support for large pages, extended adressing space, 5-level paging of memory, notably LA57 allowing new kinds of sandboxing, isolation, and better support of NUMA and stricter control of resources usage, notably against time-based attacks on memory caches, or on vitualized-I/O caches notably for networking, graphics and audio rendering or encoding, including for remote desktop via RDP, or for virtulized performance counters used by guest apps and services running in VMs or containers).

@TheDarkerPhantom
Copy link

virtualization is almost required in Windows 11 now for many features (even if you don't want to install a guest OS in a VM using the Hyper-V host manager. It is used now for security (VBS, HVCI, MDAG...), or for containers, or for LXSS (which now allows installing any Linux environment with a Microsoft-provided kernel using paravirtualization to use full integration within Windows, but within the context os the currently connected Windows user; distributions are now available in the Microsoft Store); it is used as well for development (e.g. in Visual Studio, to install an Android emulator, and soon it will be used for running Android apps directly within Windows). The Hyper-V core can also be used to install containers (including Docker); it is also used now inside several graphics accelerators; it is used as well for deploying remotely-administered applications within a sandbox: Windows virtualizes itself.
Support for hardware virtualization is anyway needed even if you boot Windows 11 by disabling Hyper-V in EFI boot parameters), but prefer using another hyper-visor running either as a service in windows or in the context of a local windows user only for his own VMs. Hyper-V also allows another secondary-level hypervisor to run on top of Windows itself in Hyper-V (secondary-level hypervisors however will not control the full hardware: this works for running VMware on top of Hyper-V, so that you don't need to disable Hyper-V, and many new other Windows services depending on it, to run a VM.
Very soon, Windows 11 will allow booting on something else than Hyper-V, and will be able to control this other "core" hypervisor": other hypervisor are already preparing themselves to offer the needed secure APIs via their "hyper-bus" using a common protocol. This will also be used by Microsoft to improve the hosting of Windows virtual servers inside Azure (which uses large farms of servers already running Linux-based hypervisors, instead of Hyper-V itself on bare-metal
Deeps changes are being developed inside "HAL" and the Windows kernel so that Windows will be more independent of the hypervisor on which it runs. May be these new windows HAL and kernels will not be available on PC only licensed for Windows Home or Pro, only for those with Enterprise or Student or Server E3/E5 licenses of Windows.
All modern OSes now want to use virtualization, preferably with hardware support (notably with multiple cores, the IOMMU, advanced APIC, support for large pages, extended addressing space, 5-level paging of memory, notably LA57 allowing new kinds of sandboxing, isolation, and better support of NUMA and stricter control of resources usage, notably against time-based attacks on memory caches, or on virtualized-I/O caches notably for networking, graphics and audio rendering or encoding, including for remote desktop via RDP, or for virtualized performance counters used by guest apps and services running in VMs or containers).

Hardware Virtualization (VT-x or AMD-V) support absolutely is not required for Windows 11. However, any processor that is supported by Windows 11, has support for VT-x or AMD-V so it does not matter. Most Windows 11 Home machines will never see VT-x enabled unless they install a hypervisor like VMWare or VirtualBox since it doesn't support Hyper-V

@verdy-p
Copy link
Author

verdy-p commented Sep 24, 2021

Microsoft has been clear that it wants hardware virtualiaztion in Windwos 11 for secirity, including HVCI (and VBS for Enterprise version). And processor or EFI BIOS that does not properly support it won't pass the qualification test. Microsoft made its selection of processors by only choosing those that have a builtin support (but it's not the only requirement, because there are also requirements in the EFI BIOS, and in device drivers (notably graphics drivers that MUST be DCH-compatible; and not that even if the non-DCH driver is not used, or disabled, that drivers for now MSY also be compeltely uninstalled, i.e. compeltely removed from the DriversStore, otherwise HVCI will not work at boot, and Windwos will complain about illegal DMA accesses made by attmpts of Windwos to load the driver at boot time, just to perform some PNP probe, even if that probe fails and the driver is instantly unloaded: this happens when these drivers are slso signed and have a WHQL signature, including Intel drivers, or evven if Windows has been instructed to not use these drivers,, it still performs the device probing at boot during the PNP enumeration, and even if finally that device driver is not installed and not visible in the device manager, not even as a "hidden" device; IMHO this is a critical bug of the Windows kernel: PNP is not safe at all if the simple presence of a driver can force HVCI and VBS to be turned off).

That's why I wrote "hardware virtualization is ALMOST required" (capitalization added). Microsofot does not want to admit it, publicly, but visibly its very restrictive list of criteria is based on this (at least) and there are probably other (untold) reasons (that Microsoft also does not want us to know: even their new version of the compatibility checker program REFUSES to give any reason and just sends us to their generic commercial page with basic requirements for Windows 11. All the rest is hidden and only availabel to its OEM partners. Users cannot get the truth, and their test simply does not even run at all, and pretends that the PC is not compatible, without giving any reason we could possibly fix!

@rcmaehl rcmaehl added PRO To be included in Enterprise Edition and removed enhancement New feature or request labels Nov 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
checks Check improvement or new check. PRO To be included in Enterprise Edition
Projects
None yet
Development

No branches or pull requests

6 participants