VMware Workstation和Device/Credential Guard不兼容

Gma*_*man 92 vmware mount cmd vmware-workstation windows-10

去年我一直在运行VMware没有问题,今天我打开它启动我的一个虚拟机并收到错误消息,看屏幕截图.

在此输入图像描述

我确实按照链接执行了步骤,在步骤4中我需要使用"mountvol"安装卷.当我尝试使用mountvol X: \\?\Volume{5593b5bd-0000-0000-0000-c0f373000000}\它安装卷时,我一直说The directory is not empty.我甚至创建了一个2GB的分区,但仍然是相同的消息.

我的问题:

如何安装非空的卷,即使它是?

为什么这个Device/Credential Guard会自动启用它,如何摆脱它或禁用它.

CMD: 在此输入图像描述

use*_*825 70

有一个更好的方法来处理这个问题.您只需进行备用启动即可在需要使用VMWare时暂时禁用Hyper-V,而不是完全删除Hyper-V.如图所示......

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.
Run Code Online (Sandbox Code Playgroud)

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

当你重新启动时,你会看到一个包含两个选项的菜单......

  • Windows 10
  • 没有Hyper-V

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

如果要再次删除引导条目.您可以使用bcdedit的/ delete选项.

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

C:\>bcdedit /v
Run Code Online (Sandbox Code Playgroud)

这会列出所有带有ID的条目.复制相关的ID,然后将其删除...

C:\>bcdedit /delete {ff-23-113-824e-5c5144ea}
Run Code Online (Sandbox Code Playgroud)

如评论中所述,您需要从提升的命令提示符执行此操作,而不是PowerShell.在powershell中,命令会出错.

  • 这是恕我直言的最佳答案 (4认同)

mag*_*981 66

Device/Credential Guard是基于Hyper-V的虚拟机/虚拟安全模式,可托管安全内核,使Windows 10更安全.

在此输入图像描述

... VSM实例与正常操作系统功能隔离,并受到尝试在该模式下读取信息的保护.保护是硬件辅助的,因为管理程序正在请求硬件以不同方式处理这些存储器页面.这与同一主机上的两个虚拟机无法相互交互的方式相同; 它们的内存是独立的,并且受硬件监控以确保每个VM只能访问它自己的数据.

从这里开始,我们现在可以使用保护模式来运行安全敏感操作.在撰写本文时,我们支持三种可以驻留的功能:本地安全机构(LSA)和内核模式代码完整性(KMCI)形式的代码完整性控制功能以及管理程序代码完整性控制本身,称为管理程序代码完整性(HVCI).

在此输入图像描述

当这些功能由VSM中的Trustlet处理时,主机操作系统只需通过操作系统内部的标准通道和功能与它们进行通信.虽然允许这种特定于Trustlet的通信,但是在主机操作系统中使用恶意代码或用户尝试读取或操作VSM中的数据将比没有配置该系统的系统更加困难,从而提供安全性优势.

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





并且Hyper-V和VMware 不能同时工作.您必须将VM迁移到Hyper-V或禁用该功能.在控制面板 - >程序和功能 - >打开或关闭功能时,应该足以选择Hyper-V和隔离用户模式功能:

在此输入图像描述

  • 我的Windows 10(周年纪念更新)版本号为14393.351,并且在我只有"Hyper-V Hypervisor"的两个突出显示的功能中,而不是"隔离用户模式".我只能通过卸载"Hyper-V Hypervisor"功能来修复VMware问题.我很高兴我没有完成VMware在其[KB]中的手动步骤(https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2146361) (10认同)
  • 无需以这种方式禁用Hyper-V,也无需安装任何第三方实用程序.只需使用带有builtin bcdedit命令的备用引导选项,就可以根据需要打开和关闭Hyper-V(请参阅我的回答). (2认同)
  • 该解决方案似乎不适用于Win10 Creators Update。 (2认同)
  • 我还需要卸载 Windows 功能“Linux 子系统”并重新启动以消除此错误。 (2认同)

gue*_*e22 29

我仍然不相信Hyper-V对我来说是件事,即使是去年的Docker试验和磨难,我想你不会非常频繁地切换,所以不是创建一个新的启动并确认启动默认或每次启动等待超时我在管理模式下通过控制台切换需求

bcdedit /set hypervisorlaunchtype off
Run Code Online (Sandbox Code Playgroud)

这篇文章的另一个原因 - 为您节省一些麻烦:您认为再次使用"on"参数切换Hyper-V?不.MiRKoS..t太简单了.这是自动的!

玩得开心!
G.

  • 和`bcdedit / set hypervisorlaunchtype auto`如果需要将其重新打开。 (2认同)
  • 我需要重新启动才能运行虚拟机。 (2认同)

Sha*_*ski 11

要使其超级简单:

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

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

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


J. *_*dar 9

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

要禁用 Hyper-V 并使 VMWare 正常工作,请在 PowerShell 中以管理员身份:

bcdedit /set hypervisorlaunchtype off
Run Code Online (Sandbox Code Playgroud)

要重新启用 Hyper-V 并暂时中断 VMWare,请在 PowerShell 中以管理员身份:

bcdedit /set hypervisorlaunchtype auto
Run Code Online (Sandbox Code Playgroud)

之后你需要重新启动。我已经编写了一个 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

    }

}
Run Code Online (Sandbox Code Playgroud)


小智 5

此问题最简单的解决方案是下载“Device Guard and Credential Guard 硬件准备工具”以更正不兼容性: