I had a very hard time getting rid of Hyper-V in my setup, on a Windows 11 Pro host. The "normal" steps I found all over the web weren't enough! Web sleuthing finally got me what I needed, and for posterity and future searchers I want to document what I did to achieve the coveted CPL0 monitor mode and improved VMWare virtualization performance under Win11.
So, what's going on with this OS that creates this new problem for Type 2 (hosted) hypervisors like VMWare Player/Workstation or VirtualBox? Windows 11 Pro, by default, doesn't have the Hyper-V features enabled (to actually run Hyper-V guests), but it (like Windows 11 Home, btw) does use the Hyper-V hypervisor for certain new "Virtualization-Based Security" (VBS) features. These include Device Guard, Credential Guard, and core (memory) isolation. Basically, with VBS the entire host operating system is actually not running as the host at all, it's running as a Hyper-V guest on top of the Hyper-V platform. This has some detrimental performance impact (mostly unnoticeable in normal use, except in gaming), but the advantage is that with the OS running as a "guest," with all hardware access having to cross the virtualization boundary, all kinds of additional security features become possible to prevent/mitigate modern attack vectors. Microsoft deems these protections to outweigh the performance hit, so as of 22H1 or 22H2 update, memory integrity protection, Device Guard, and Credential Guard are enabled by default on a new OS install, if the EFI settings have the CPU virtualization capabilities (VT-d, etc.) enabled. An existing install that's upgraded to 22H? will honor the existing settings btw.
OK, so what's the problem? It's actually not a problem at all, in a way, at least not since Workstation/Player 17 I believe, which introduces "play nice with Hyper-V" capability. If the Hyper-V hypervisor is active on the system, VMWare's product sets aside its own virtualization platform and uses the Hyper-V APIs to create the virtualized environment on which to run a guest. In a way, Hyper-V is running the virtual "hardware" for VMWare, while VMWare provides some of the value-added features like USB capture, 3D-accelerated graphics, etc. Same goes for VirtualBox's newer versions. The price to pay, though, is that this "referred" virtualization is slower than VMWare's own implementation would be, if only it could run in full-privilege mode, access VT-d directly, and operate its own virtualization stack.
The user/admin/operator of the Windows 11 host must make a decision as to which is more important: the new and enhanced bulletproofing against attacks provided by virtualization-based security features, plus the interoperability with Hyper-V (VMWare can coexist alongside Hyper-V features; one can run a Hyper-V guest and a VMWare guest at the same time!), and let's not forget that Hyper-V is necessary for the Sandbox/WSL feature...or ditching the Hyper-V platform altogether, and the extra security features, and the ability to run WSL, to get the best possible performance out of VMWare Player/Workstation.
If you're wondering for your Win11 host whether Workstation/Player 17 is running its own virtualization stack or not, first take a look at System Information app (search for it in Start menu). The System Summary page has an entry near the bottom of the list named "Virtualization-based Security". As long as that doesn't say "Not enabled", the Hyper-V hypervisor is pulling the strings, and the host OS you're looking at is actually a well-disguised guest OS. To see what VMWare has to say on the subject of current state, run any VM and take a look at the VMWare.log file that gets put alongside the VMX and other files for the VM. Search for "Monitor Mode:" and see the value after the colon. If the value is "CPL0", the VMWare engine is running. If the value is "UML", the slower Hyper-V API is in use.
OK, so let's say you've decided to go ahead and remove the hypervisor and let the host OS run without virtualization. Here is a sequence of actions to take. Some people seem to have luck with the first set, but if the first set is not enough, I've also got the final silver bullet that will definitely get that VBS value in System Information to change to "Not enabled," and VMWare (or VirtualBox) to be able to run with full hardware access and its own engine.
Phase 1:
Some people seem to succeed by doing just that. Check System Information. Is the VBS feature no longer in running stated? If not, let's try Phase 2, which throws several more kitchen sinks at the problem.
Phase 2:
Still not there? That's what happened to me, but there's one more thing to do, luckily assisted by a tool (script) provided by Microsoft, which in my experience finally takes that last step toward the nirvana of seeing the "disabled" value for VBS:
Phase 3:
There is a manual way to do this, and I found the instructions, but they're a bit scary. It involves using bcdedit to modify the boot configuration to apply a configuration change that sets a "DISABLE-LSA-ISO" option. Lots of opportunity for something to go wrong if the instructions I found are flawed, or if a mistake is made (typo, missed a command). So, I'm strongly recommending (and providing instructions for) the method that uses the Microsoft-provided script. I've tested it, it worked for me, and the same script provides a way to undo the whole thing later if desired, too. Power users are welcome to find the instructions I found on their own, or to simply open the script file and examine what it does for any manual implementation activities.
I hope somebody finds this long writeup useful, either while searching this forum, or maybe when finding this post via a web search someday. It's based on what I documented during 2 days of web searches and frustration, and maybe it will save someone some headaches and time.
Woops, "D" plus colon got interpreted as a smiley of course, so as a correction, where the smiley is it's supposed to say D<colon>, as in drive D.
Thank you for the guide! I almost gave up on my recently purchased workstation pro 17. You're phase 3 definitely helps since none of Phase 1 and 2 works on Windows 11 Pro 22H2. After running the PowerShell script (more instruction in the Readme.txt from the downloaded zip file), the reboot will prompt and just need to press F3 to disable both the DG/CG.
Hey!!! This works like a charm! thanks for the "Phase 3", this was the only step who solved my issues with Workstation 17.
I am on step :
Now we can run the script. Type/paste (if the version number has changed since I posted this, adjust according to the filename of the .ps1 script file in the extracted folder):
DG_Readiness_Tool_v3.6.ps1 -Disable
And when I run command DG_Readiness_Tool_v3.6.ps1 -Disable I get the following error:
How do I get past this?
First, does "C:\Users\Zohaiali\Downloads\dgreadiness_v3.6\dgreadiness_v3.6" directory contain a file named "DG_Readiness_Tool_v3.6.ps1", exactly the same as what you're typing?
If this exact file does not exist, why not? Is the name slightly different, or the ZIP was not fully extracted, or what?
If the exact file does exist, try putting period and backslash in front of the filename, to make sure PowerShell knows you're referring to a file in the current directory and not to an internal command:
.\DG_Readiness_Tool_v3.6.ps1 -Disable
yes the script file is in the folder:
OK, then did executing with period and backslash in front of the script filename work? If not, something else is wrong that I can't see from the provided information. If your admin PowerShell prompt's current directory is the one containing the file, and you reference the file by its exact filename, PS should try to execute it, or at worst give an error about not being able to due to something like an execution policy setting.
FWIW, for me running the following on Windows 11 Professional will enable CPL0 for the VMware hypervisor
bcdedit /set hypervisorlaunchtype off
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f
by disabling two Windows features. Running
bcdedit /set hypervisorlaunchtype auto
reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f
restores that.
Nothing else is required.
Hi cynar! Did you have to do any of phase 1, phase 2 or phase 3 in the above instructions, before your suggested solution? Also, I wonder if your solution is as performant as doing phases 1 to 3 above, given that VBS would ostensibly still be operating in the Windows 11 host OS, so would that be worth checking, by comparing a VMs performance under both scenarios?
I only exactly run the two above commands (I occasionally flip back and forth, playing with WSL2 - which requires the Microsoft virtualization stack -, so I am confident that all of this works just fine.).
The first command explicitly prevents the Windows Hyper-V hypervisor from being used.
The second command explicitly also makes sure that the hypervisor will not magically come back.
The effect of both commands combined is that the VMware hypervisor can run at the lowest (i.e. the best) privilege level, resulting in the CPL0 entry in the VMware logs. With the VMware hypervisor at CPLO, I expect that none of the Microsoft tooling sitting on top of _their_ virtualization layer will work (or interfere).
With respect to performance, I can easily tell on my system when the VMware Workstation hypervisor is not running at CPL0. I have not felt the need to scientific benchmarking after having identified the required steps to get to CPL0.
I carefully chose my hardware to not have a BIG-little CPU (I am on a simple Intel 11800H CPU), so any of the challenges of asymmetric CPU core performance scheduling do not affect me.
Hi,
I have tested your (cynar) two line solution on my HP ZBook Power 15.6" G10 A Mobile Workstation PC, preinstalled with Windows 11 Pro (currently updated to 10.0.22621), but unfortunately it didn't work.
Checking VMWare.log for VMware Workstation 17.x Player after rebooting the host still shows "Monitor Mode: ULM".
This laptop has SecureBoot enabled by default and I guess perhaps that hinders the changes to take effect?
The "Device Guard and Credential Guard hardware readiness tool" suggested in svenmerget's great post seems designed for Windows 10 and therefore I haven't tried that (yet).
I registered a support request at VMware Technical Support on november 8 and have had a long Zoom session with a "Technical Support Engineer-EUC" without any luck.
The request is still "active" and hopefully this will render an official solution from WMware...
Secure Boot has nothing to do with this. Secure Boot is a BIOS mechanism that verifies that any OS that tries to boot has a trusted certificate that's stored in the BIOS database, with a default database populated by the mainboard manufacturer. It's a security measure to prevent e.g. some strange USB stick from booting up a malicious Linux portable distro to gain access to the machine and its drives and start doing malicious things on the machine. The problem we're concerned with in this thread and with VMWare's virtualization engine vs. the Hyper-V engine being used, is whether the host Windows OS itself is running on the Hypervisor virtualization layer or not. This used to be simple. If Hyper-V was installed/enabled, the host OS was also virtualized since Hyper-V is a Type 1 Hypervisor. Now, though, in the Win11 days, the number of scenarios where the Hypervisor is active has been multiplying, and in any new/clean Win11 install it is the default state. There are clear security advantages to running even the "main" OS in a virtualization environment, in terms of isolating its CPU, memory, and other hardware access. If the Hypervisor mediates all hardware access, it can prevent some of the more sophisticated attack vectors that are out there.
Anyway, assuming you're willing to forego the security advantages in favor of performance, want the host OS to run "directly" on the hardware, and want VMWare software to have direct access to VTd and the ability to run its own Type 2 hypervisor alongside the host OS ("CPL0"), the instructions I provided do work on Win11. Win11 is where I worked out my instructions and met success using them.
Well, that sounded quite useful, but in the end the microsoft script failed with DISM not recognizing the "Microsoft-Hyper-V-Online" option, therefore it just failed. Googling around showed that this is indeed a valid function/feature, but why on earth does DISM fail on my brand new Windows11 PC?
Edit: I found out that "Microsoft-Hyper-V-All" is a valid option for the DISM command, unfortunately this doesn't work either. No matter how hard I try, the system will always come up with Hyper-V running. 😞
Maybe this is a Pro vs. Home problem. Home has a more limited features set, and maybe something the script is trying to do fails because of it. Does this machine have Home edition? If so, maybe it has to be upgraded to Pro before the script/procedure will work, although there may be some other way to get the desired result without upgrading. If it has Pro edition already, sorry, no further ideas to contribute.
No, this is a Win11 Enterprise system.
rewrite post accidental purged of first message.
I have Windows Sandbox currently, running on windows 11 Version 22H2 (OS Build 22621.1194),
on "native boot" (if that's the right term. - "vhd on bare metal" - now vhdx on uefi to be precise)
1. I tried Windows Sandbox without optional "required" features... and it works!
🐛 systray says "no network" but network works: normal? ; just me?
Current optional features (classic) - NB no containers, Hyper-V things...
2. With Windows Sandboxes you can't have multiple instances, or spawn a box within a box...
Is either of these possible via other providers like docker or other vm_things? Any bests?
3. Just in case... anyone tried or managed to remove the single-instance limiter on Windows Sandbox?!
I know it's probably virtually impossible... but we have curiosities.
Asking for a friend. Thanks for the reading material! This threads gonna take a while to peruse!
I did Phase 1 and it seems to have worked.
I'm running Windows 11 22H2 (22621.3007).
When I checked the VMware.log, Monitor Mode was CPL0.
Does your sandbox network config (in system tray) also incorrectly indicate no-net?
I suspect it's incorrect, as even the Start Menu's bing search-provider returns results!
Biggest Usability Issues
This may be normal (can you confirm?) I wouldn't be surprised if this is just me -
⌨️🐛 alt+tab in host doesn't work, even in window mode, when sandbox window is focused
Expected: able to switch to other apps
Observed: sandbox "add" consumes all "alt+tab" or winkey+number or ctrl+shift+esc
Workaround: ctrl+alt+del then alt+t to focus task manager, or use mouse 🤢 KB4EVA!🤓
Great Information thank you! ...
I was able to do everything via Phase 1 and Phase 2 ... I had to manually create the 'EnableVirtualizationBasedSecurity' key as it was not there but no big deal ... am now running ... my installation already said it did the Hyper V part on its own but it didn't ... VM seems a lot more snappy now...