VMware Workstation和设备/凭据保护不兼容


120

去年我一直在运行VMware,没有问题,今天我打开它来启动我的VM之一,并收到错误消息,请参见屏幕截图。

在此处输入图片说明

我确实遵循了链接并完成了步骤,在步骤4中,我需要使用“ mountvol”安装卷。当我尝试使用mountvol X: \\?\Volume{5593b5bd-0000-0000-0000-c0f373000000}\它挂载卷时,我一直在说The directory is not empty.我什至创建了一个2GB的分区,并且消息仍然相同。

我的问题:

我如何安装不为空的卷(即使已为空)?

为什么此Device / Credential Guard自动启用自身,以及如何摆脱或禁用它。

CMD: 在此处输入图片说明

Answers:


81

设备/凭据保护是基于Hyper-V的虚拟机/虚拟安全模式,其托管安全内核以使Windows 10更加安全。

在此处输入图片说明

... VSM实例与正常的操作系统功能分开,并受到尝试以该模式读取信息的保护。由于虚拟机管理程序正在请求硬件以不同方式对待这些内存页面,因此保护是由硬件提供的。这是相同方法,即同一主机上的两个虚拟机不能互相交互;它们的内存是独立的,并且受硬件监管,以确保每个VM只能访问自己的数据。

从这里开始,我们现在有了一种受保护的模式,可以在其中运行对安全性敏感的操作。在撰写本文时,我们支持可以驻留在此处的三种功能:本地安全机构(LSA)和以内核模式代码完整性(KMCI)形式存在的代码完整性控制功能以及虚拟机管理程序代码完整性控制本身,这称为系统管理程序代码完整性(HVCI)。

在此处输入图片说明

当这些功能由VSM中的Trustlet处理时,主机OS只需通过标准通道和OS内部的功能与它们进行通信。虽然允许这种特定于Trustlet的通信,但与未配置此功能的系统相比,让主机OS中的恶意代码或用户尝试读取或操纵VSM中的数据将变得更加困难,从而提供了安全性好处。

在VSM中运行LSA,将导致LSA进程本身(LSASS)保留在主机OS中,并创建了一个特殊的LSA附加实例(称为LSAIso –表示LSA Isolated)。这是为了使对LSA的所有标准调用仍然能够成功,即使对于需要与LSA直接通信的服务或功能,也可以提供出色的传统和向后兼容性。在这方面,您可以将主机OS中的其余LSA实例视为“代理”或“存根”实例,它们仅以规定的方式与隔离版本进行通信。


Hyper-V和VMware 直到2020年才开始同时工作当时VMware使用Hyper-V平台15.5.5版开始与Hyper-V共存

15.5.5版之前的VMware Workstation如何工作?

传统上,VMware Workstation使用虚拟机监视器(VMM),该虚拟机以特权模式运行,需要直接访问CPU以及访问CPU的内置虚拟化支持(英特尔的VT-x和AMD的AMD-V)。当Windows主机启用基于虚拟化的安全性(“ VBS”)功能时,Windows将在硬件和Windows之间添加基于Hyper-V的管理程序层。任何运行VMware传统VMM的尝试都会失败,因为VMM不在Hyper-V内部,无法再访问硬件的虚拟化支持。

引入用户级别监控器

为了解决此Hyper-V / Host VBS兼容性问题,VMware的平台团队重新设计了VMware的Hypervisor,以使用Microsoft的WHP API。这意味着将我们的VMM更改为在用户级别而不是特权模式下运行,并对其进行修改以使用WHP API管理来宾的执行,而不是直接使用底层硬件。

这对您意味着什么?

启用Hyper-V后,VMware Workstation / Player现在可以运行。您不再需要在运行VMware Workstation和Windows功能(例如WSL,Device Guard和Credential Guard)之间进行选择启用Hyper-V后,将自动使用ULM模式,因此您可以正常运行VMware Workstation。如果您根本不使用Hyper-V,则VMware Workstation足够聪明,可以检测到这一点,并且将使用VMM。

系统要求

要使用Windows Hypervisor API运行Workstation / Player,最低要求的Windows 10版本是Windows 10 20H1内部版本19041.264。VMware Workstation / Player的最低版本为15.5.5。

为避免该错误,请将Windows 10更新为2004 / Build 19041版(Mai 2020更新)并至少使用VMware 15.5.5


11
我的Windows 10(周年更新)的版本为14393.351,在突出显示的两个功能中,我只有“ Hyper-V虚拟机管理程序”,而没有“隔离用户模式”。通过仅卸载“ Hyper-V Hypervisor”功能,我能够解决VMware问题。我很高兴我不必执行VMware在其知识库中所
Adam Elkurd,2016年

2
无需通过这种方式禁用Hyper-V,也无需安装任何第三方工具。只需使用内置bcdedit命令的备用启动选项,即可根据需要打开和关闭Hyper-V(请参阅我的答案)。
user1751825

2
该解决方案似乎不适用于Win10 Creators Update。
asliwinski

1
@AmatVictoriaCuram使用服务器管理器删除Hyper-V角色
magicandre1981 '18

2
我还需要卸载Windows功能“ Linux子系统”,然后重新启动才能使此错误消失。
Mtxz

83

有一个更好的方法来处理此问题。无需完全删除Hyper-V,您只需进行备用引导即可在需要使用VMWare时暂时将其禁用。如图所示...

http://www.hanselman.com/blog/SwitchEasilyBetweenVirtualBoxAndHyperVWithABCDEditBootEntryInWindows81.aspx

C:\>bcdedit /copy {current} /d "No Hyper-V" 
The entry was successfully copied to {ff-23-113-824e-5c5144ea}. 

C:\>bcdedit /set {ff-23-113-824e-5c5144ea} hypervisorlaunchtype off 
The operation completed successfully.

注意:从第一个命令生成的ID是您在第二个命令中使用的ID。不要仅仅逐字地运行它。

重新启动时,您将只看到带有两个选项的菜单...

  • Windows 10
  • 没有Hyper-V

因此,使用VMWare只需重新启动并选择No Hyper-V选项即可。

如果要再次删除引导项。您可以将/ delete选项用于bcdedit。

首先,获取当前引导项的列表...

C:\>bcdedit /v

这列出了所有条目及其ID。复制相关的ID,然后像这样将其删除...

C:\>bcdedit /delete {ff-23-113-824e-5c5144ea}

如注释中所述,您需要通过提升的命令提示符而不是Powershell来执行此操作。在powershell中,该命令将出错。

更新:如果花括号用反引号(`)逸出,则可以在powershell中运行这些命令。像这样

C:\WINDOWS\system32> bcdedit /copy `{current`} /d "No Hyper-V"

1
注意:在管理员命令行中运行命令,PowerShell因为它不起作用。
MaciejLisCK

这对我有用,但是如何回滚上述操作?
user3402754

您可以对bcdedit使用/ delete选项,以删除克隆的条目。我在上面更新了我的答案。
user1751825

5
这是最好的答案恕我直言
Dror'Yitzhakov

1
@SomethingSomething您需要从提升的命令提示符下运行命令。右键单击并选择“以管理员身份运行”。
user1751825 '19

43

我仍然不相信Hyper-V是我的理想之选,即使使用了去年的Docker试验和灾难,我想您也不想频繁切换,因此,与其创建一个新的启动并确认启动默认值,要么每次启动时都等待超时,我通过以下方式在控制台中按需打开控制台:

bcdedit /set hypervisorlaunchtype off

这篇文章的另一个原因-会让您有些头疼:您以为您再次使用“ on”参数打开了Hyper-V吗?不。对于MiRKoS..t来说太简单了 它是自动的

玩得开心!
G。


它可以正常工作,特别是在您需要同时拥有两者的情况下(而不是卸载整个Hyper-V Hypervisor)。我继续在两者之间切换以同时使用这两种技术。这就是为什么我更喜欢这种方式。
Mohamed El-Beltagy

7
以及bcdedit /set hypervisorlaunchtype auto是否需要重新打开它。

2
我需要重新启动才能运行VM。
Chetan

1
这是最简单,最贴心的解决方案,非常感谢。
Hemanth Savasere '19年

20

要使其超级简单:

  1. 只是 直接从Microsoft 下载此脚本

  2. 以管理员身份运行Powershell,然后执行以下命令:

    • 验证是否启用了DG / CG DG_Readiness.ps1 -Ready
    • 禁用DG / CG。 DG_Readiness.ps1 -Disable

如果您提供了有关如何正确使用您说要下载的脚本的信息,则将更有帮助。每当有人为Powershell发布脚本时,他们就永远不会正确解释如何使用它。
Pegues

就我而言,由于脚本执行被禁用,我无法执行脚本。我必须首先使用以下命令启用脚本执行: Set-ExecutionPolicy unrestricted 重新启动时,系统提示禁用Device Guard。感谢您的解决方案!
拉济克

我取消了注册表中的所有框,它仍然引发错误。这个脚本对我有用。最终在重新启动时得到了提示,以禁用设备防护和其他保护功能。
杜加德

9

对于那些可能因最近涉及Hyper-V的计算机更改而遇到此问题的人,您需要在使用VMWare或VirtualBox时将其禁用。他们不一起工作。Windows Sandbox和WSL 2需要打开Hyper-V虚拟机监控程序,该虚拟机当前会破坏VMWare。基本上,您将需要运行以下命令来在下次重启时启用/禁用Hyper-V服务。

要禁用Hyper-V并使VMWare工作,请在PowerShell中以Admin身份运行:

bcdedit /set hypervisorlaunchtype off

要暂时重新启用Hyper-V并中断VMWare,请在PowerShell中以Admin身份运行:

bcdedit /set hypervisorlaunchtype auto

之后,您需要重新启动。我已经编写了一个PowerShell脚本,它将为您切换此脚本并使用对话框进行确认。它甚至可以使用此技术自动提升为管理员,因此您只需右键单击并运行脚本即可快速更改Hyper-V模式。也可以轻松地对其进行修改以重新启动,但是我个人不希望这种情况发生。将其另存为hypervisor.ps1并确保已运行,Set-ExecutionPolicy RemoteSigned以便可以运行PowerShell脚本。

# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);

# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;

# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
    # We are running as an administrator, so change the title and background colour to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
    $Host.UI.RawUI.BackgroundColor = "DarkBlue";
    Clear-Host;
}
else {
    # We are not running as an administrator, so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
    $newProcess.Arguments = "-windowstyle hidden & '" + $script:MyInvocation.MyCommand.Path + "'"

    # Indicate that the process should be elevated
    $newProcess.Verb = "runas";

    # Start the new process
    [System.Diagnostics.Process]::Start($newProcess);

    # Exit from the current, unelevated, process
    Exit;
}

Add-Type -AssemblyName System.Windows.Forms


$state = bcdedit /enum | Select-String -Pattern 'hypervisorlaunchtype\s*(\w+)\s*'


if ($state.matches.groups[1].ToString() -eq "Off"){

    $UserResponse= [System.Windows.Forms.MessageBox]::Show("Enable Hyper-V?" , "Hypervisor" , 4)

    if ($UserResponse -eq "YES" ) 
    {

        bcdedit /set hypervisorlaunchtype auto
        [System.Windows.Forms.MessageBox]::Show("Enabled Hyper-V. Reboot to apply." , "Hypervisor")

    } 

    else 

    { 

        [System.Windows.Forms.MessageBox]::Show("No change was made." , "Hypervisor")
        exit

    }

} else {

    $UserResponse= [System.Windows.Forms.MessageBox]::Show("Disable Hyper-V?" , "Hypervisor" , 4)

    if ($UserResponse -eq "YES" ) 
    {

        bcdedit /set hypervisorlaunchtype off
        [System.Windows.Forms.MessageBox]::Show("Disabled Hyper-V. Reboot to apply." , "Hypervisor")

    } 

    else 

    { 

        [System.Windows.Forms.MessageBox]::Show("No change was made." , "Hypervisor")
        exit

    }

}

1
简短而有效,无需更改Windows注册表中的任何内容或禁用Windows功能。谢谢。
Alexandru Dicu

1
感谢您分享此解决方案。尽管没有什么联系,但这也解决了Virtualbox性能过慢的问题。在此解决方案之前,尝试在Virtualbox中安装Win10 guest虚拟机操作系统非常慢。Virtualbox从不警告我关闭虚拟机监控程序,这导致了对VMWare的调查。我找到了您的解决方案,它同时解决了VMWare和Virtualbox中的问题。
Zythyr

遗憾的是,即使在Windows 10上更新了v2004,这仍将使VMware Workstation重新工作,但是如果阻止Docker for Windows运行....似乎Docker是启用此设置的人。
肖恩·梅尔顿

那是金色的,而且效果很好!您是否可以就禁用Hyper-V的含义分享想法?这是Win10中的安全性问题吗?谢谢!
atripes

1
@atripes没问题!禁用Hyper-V禁用Windows系统服务,该服务为其他程序提供接口以虚拟化您的硬件。因此,禁用此服务不是安全问题,因为它只会停止启动服务。在这种情况下,该服务实际上阻止了虚拟化在其他地方发生,因此这正是我们想要的!
J. Blackadar


3

我不知道为什么,但是DG_Readiness_Tool的3.6版对我不起作用。重新启动后,笔记本电脑问题仍然存在。我一直在寻找解决方案,最后遇到了该工具的3.7版,这次问题消失了。在这里您可以找到最新的Powershell脚本:

DG_Readiness_Tool_v3.7


1

我在这个问题上也很努力。该线程中的答案很有帮助,但不足以解决我的错误。就像其他答案一样,您将需要禁用Hyper-V和Device Guard。有关更多信息,请参见此处

除了上面提供的答案之外,我还包括需要进行的更改。最终帮助我的链接是这个

我的答案仅是总结其余答案(即禁用Hyper-V和Device Guard)与以下步骤之间的区别:

  1. 如果使用了组策略,请禁用用于启用Windows Defender凭据保护的组策略设置(计算机配置->管理模板->系统->设备保护->启用基于虚拟化的安全性)。
  2. 删除以下注册表设置:

    HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ LSA \ LsaCfgFlags HKEY_LOCAL_MACHINE \ Software \ Policies \ Microsoft \ Windows \ DeviceGuard \ EnableVirtualizationBasedSecurity HKEY_LOCAL_MACHINE \ Software \ Policies \ Microsoft \ Windows \ DeviceGuard \ RequirePlatformSecurityFeatures

    重要提示: 如果您手动删除这些注册表设置,请确保将其全部删除。如果未全部删除它们,则设备可能会进入BitLocker恢复。

  3. 使用bcdedit删除Windows Defender Credential Guard EFI变量。在提升的命令提示符下(以管理员模式启动),键入以下命令:

     mountvol X: /s
    
     copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y
    
     bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
    
     bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"
    
     bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
    
     bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
    
     bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
    
     mountvol X: /d
    
  4. 重新启动电脑。

  5. 接受提示以禁用Windows Defender Credential Guard。

  6. 或者,您可以禁用基于虚拟化的安全功能以关闭Windows Defender Credential Guard。


如果上述答案无效,请尝试1。2 bcdedit /set hypervisorlaunchtype off.重新启动Windows
Nicholas K

1

每一步都有快速解决方案:

修复了Windows 10主机传输(VMDB)上的VMware Workstation中的错误-14:管道连接已断开。

今天,我们将修复Windows 10计算机上的VMWare错误。

  1. 在“运行”框中,键入“ gpedit”,然后转到[错误查看点3]

1-计算机配置2-管理模板3-系统-设备保护:如果没有DEVICE GUARD:(DOWNLOAD https://www.microsoft.com/en-us/download/100591 安装此"c:\Program Files (x86)\Microsoft Group Policy\Windows 10 November 2019 Update (1909)\PolicyDefinitions" COPYc:\windows\PolicyDefinitions)4-对基于虚拟化的打开安全。现在,双击并“禁用”

  1. 以管理员身份打开Command Prompt,然后键入以下gpupdate / force [如果没有设备保护,请不要再这样做]

  2. 打开注册表编辑器,现在转到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceGuard。添加一个新的DWORD值EnableVirtualizationBasedSecurity,并将其设置为0以禁用它。接下来转到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA。添加一个新的DWORD值LsaCfgFlags,并将其设置为0以禁用它。

  3. 在“运行”框中,键入“打开或关闭Windows功能”,现在取消选中“ Hyper-V”并重新启动系统。

  4. 以管理员身份打开命令提示符,然后键入以下命令

    bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader

    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"

    bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
    
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS

    bcdedit /set hypervisorlaunchtype off

现在,重新启动系统


谢谢,它对我有所帮助
Rohit gupta

0

如果您始终保持打开的自定义“以管理员身份运行”命令提示符或powershell命令行窗口,则可以选择设置以下别名/宏来简化执行@ gue22提及的命令,从而仅禁用hyper-v虚拟机管理程序需要使用vmware player或工作站时,然后在完成后再次启用它。

doskey hpvEnb = choice /c:yn /cs /d n /t 30 /m "Are you running from elevated command prompt" ^& if not errorlevel 2 ( bcdedit /set hypervisorlaunchtype auto ^& echo.^&echo now reboot to enable hyper-v hypervisor )
doskey hpvDis = choice /c:yn /cs /d n /t 30 /m "Are you running from elevated command prompt" ^& if not errorlevel 2 ( bcdedit /set hypervisorlaunchtype off ^& echo.^&echo now reboot to disable hyper-v hypervisor )
doskey bcdL = bcdedit /enum ^& echo.^&echo now see boot configuration data store {current} boot loader settings

使用上面的命令,您只需键入“ hpvenb”(在启动时启用管理程序),“ hpvdis”(在启动时禁用管理程序)和“ bcdl” [启动配置设备列表]命令来执行打开,关闭,列表命令。


0

好吧男孩和女孩在夜晚凌晨阅读了版本17093的发行说明后,发现了影响我的VMware Workstation VM并导致它们无法工作的更改点, 这是Device Security(设备安全)下的Core Isolation(核心隔离)设置。设置中的Windows安全性(Windows Defender页面的新名称)

默认情况下,它是打开的,但是当我关闭它并重新启动PC时,我所有的VMware VM恢复正常工作。也许可以在下一个版本中结合使用逐个设备选项,以允许我们测试单个设备/ App的响应,以根据需要启用或关闭每个设备或App的核心隔离。


2
您是否刚刚从community.vmware.com/message/2753727#2753727复制了整个答案?至少要给功劳。
Vishnudev K

-2

这是正确的说明,以便每个人都可以遵循。

  • 首先从此链接下载Device Guard和Credential Guard硬件准备工具: https //www.microsoft.com/zh-cn/download/details.aspx?id=53337
  • 将zip文件夹内容提取到以下位置:C:\ guard_tool
  • 在我的情况下,您将拥有类似ps1扩展文件的副本文件名的文件v3.6,因此它将为:DG_Readiness_Tool_v3.6.ps1

在此处输入图片说明

  • 接下来,单击开始菜单并搜索powershell,然后右键单击它并以管理员身份运行。

在此处输入图片说明

  • 之后,您将看到蓝色终端,输入命令 cd C:\ guard_tool ,替换cd之后的路径用您提取的工具位置
  • 现在输入命令: 。\ DG_Readiness_Tool_v3.6.ps1-禁用
  • 重启系统后
  • 当系统重新启动时,引导时间系统将以黑色背景显示通知,以确认您要禁用这些功能,因此请按F3确认。
  • 如果有帮助,则执行+1 :)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.