概要
他の仮想化ソフトを使うなどの理由で、一時的にHyper-VをOFFにしたい場合がある。BlueStacksとか。一般的なテクニックとして、bcdeditでhypervisorlaunchtype=offに設定したエントリを作るというのがよく使われているが、これが効かない環境があった。その解決方法を書く。
結論
Windowsの「コア分離(Core Isolation)」の設定を全てOFFにする必要がある。
詳細
現象としては、hypervisorlaunchtype=offのエントリでOSを起動しても、Hyper-Vが使える状態になってしまう。Hyper-Vと共存できないソフトは、その状態ではやはりエラーを出す。
hypervisorlaunchtype=off自体については説明しないので、他のサイトを参照のこと。 例:Hyper-Vとサードパーティー製仮想マシン環境を共存させる:Windows 10 Hyper-V入門(1/2 ページ) - @IT
原因は、Windowsの「コア分離(Core Isolation)」の機能がHyper-Vを使用していることだった。この設定をhypervisorlaunchtype=offで無効化することはできないようで、この設定がONだと必ずHyper-Vも有効になる。この設定をOFFにした状態だと、hypervisorlaunchtypeの値によってHyper-Vの有効・無効を切り替えることができる。
設定方法
設定はGUIで容易に可能だが、これはセキュリティ機能の一つをOFFにするということなので、リスクを許容できるかを考えて自己責任で実施すること。
スタートメニューから、「コア分離」を検索すると、「コア分離(システム設定)」というメニューが見つかる。(英語環境ではCore Isolation) ここで出てくる設定を全てOFFにすれば良い。 試した環境では「メモリ整合性」「ファームウェアの保護」が表示されていて、両方ともOFFにする必要があった。
ちなみにそれぞれ次のレジストリ値に対応しているようだ。1が有効、0が無効。
HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity\Enabled
HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\SystemGuard\Enabled
おまけ
次の2つのバッチファイルを作ることで、容易に切り替えができるようになってだいぶ便利になった。再起動が必要なのは仕方ない。
Hyper-V&コア分離をOFFする
bcdedit /set hypervisorlaunchtype off reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f reg add "HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\SystemGuard" /v "Enabled" /t REG_DWORD /d 0 /f shutdown -r -t 0
Hyper-V&コア分離をONする
bcdedit /set hypervisorlaunchtype auto reg add "HKLM\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f reg add "HKLM\System\CurrentControlSet\Control\DeviceGuard\Scenarios\SystemGuard" /v "Enabled" /t REG_DWORD /d 1 /f shutdown -r -t 0