VirtualBox и Windows 11 и Native API

Оставьте свой комментарий

Наверное многим известна проблема запуска виртуальной машины под Win11, тем что не всегда получается использовать аппаратную функцию VT-x/AMD-V. Как правило корень этой проблемы в самой Windows 11, а именно в том что она использует эту функцию самостоятельно, соответственно заблокировав её для других.

Без VT-x/AMD-V VirtualBox переключается в режим работы через Native API (NEM), а Native API — это жуткие тормоза из-за лишней прослойки. Причины гуглятся вроде очень быстро, но, помимо очевидных причин есть и неочевидные, об этом под катом.

Чек-лист диагностики

Быстрый чек-лист для диагностики (см. подробнее далее):

  • BIOS — включена ли VT-x/AMD-V физически.
  • bcdedit /enum | findstr hypervisorlaunchtype — должно быть Off.
  • Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All, VirtualMachinePlatform, HypervisorPlatform — все должны быть Disabled.
  • Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuardVirtualizationBasedSecurityStatus должен быть 0.
  • Если статус не 0 — открыть msinfo32, посмотреть «Запущенные службы» в разделе VBS, и отключить именно ту конкретную службу (Credential Guard / Memory Integrity (HVCI) / System Guard) по инструкциям ниже.
  • Проверить лог самой ВМ (VBox.log) на строку Using: VT-x (успех) против Falling back to NEM (всё ещё заблокировано).

То, что делаем в первую очередь

Базовые вещи, которые нужно сделать сразу и которые легко гуглятся.

Включить виртуализацию в BIOS

Самый первый и самый очевидный шаг — проверить BIOS. Если выключено — включить :)

Отключаем компоненты виртуализации Windows

Давайте начнём с того, что все рекомендуют сделать в первую очередь: жмём Win+R, вводим optionalfeatures и отключаем всю виртуализацию:

  • Hyper-V и все подкомпоненты
  • Платформа виртуальной машины (Virtual Machine Platform)
  • Платформа гипервизора Windows (Windows Hypervisor Platform)
  • Песочница Windows (Windows Sandbox)

Отключение гипервизора

В консоли с админ-правами выполняем bcdedit /set hypervisorlaunchtype off и отключаем запуск защищённых сред bcdedit /set vsmlaunchtype off.

Изоляция ядра / Core Isolation

Открыть Параметры (Win+I) → Конфиденциальность и безопасность → Безопасность Windows → Безопасность устройства. Перейти в «Сведения об изоляции ядра» и перевести ползунок «Целостность памяти» в положение «Выкл».

А теперь что помогло мне

Так, а теперь что делать, если перечисленное выше не помогло. (Естественно, не забываем перезагружать компьютер после каждого пункта.)

Диагностика через msinfo32

Открываем msinfo32 и смотрим на строку «Безопасность на основе виртуализации». Если там значится «Выполнение» — значит, что-то из служб VBS всё ещё держит VT-x занятым. Смотрим строку «Запущенные службы» чуть ниже — она укажет, что именно нужно отключать: Credential Guard, Memory Integrity (HVCI) или System Guard Secure Launch.

Credential Guard

Если в запущенных службах значится Credential Guard — отключаем его через редактор реестра или через консоль:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\LSA" -Name "LsaCfgFlags" -Value 0 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard" -Name "EnableVirtualizationBasedSecurity" -Value 0 -Type DWord -ErrorAction SilentlyContinue

Некоторые мануалы после этого действия рекомендуют делать две перезагрузки подряд (что-то в духе: в первый раз применяется политика, а во второй раз отключается эта защита, но я не вникал).

Memory Integrity (HVCI)

Если тумблер «Целостность памяти» в Параметрах не отключается или Windows включает его обратно, есть вариант через реестр:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" -Name "Enabled" -Value 0 -Type DWord

System Guard Secure Launch

Похоже на Credential Guard — тоже VBS-служба:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\SystemGuard" -Name "Enabled" -Value 0 -ErrorAction SilentlyContinue

Групповая политика

gpedit.msc → Конфигурация компьютера → Административные шаблоны → Система → Device Guard → отключить политику «Включить средства безопасности на основе виртуализации».

Актуально в первую очередь для доменных/корпоративных машин — если политика управляется централизованно, локальное отключение может быть переопределено доменной GPO, и потребуется обращение к ИТ-администратору.