Обнаружена неразрешенная шина / устройство с поддержкой DMA
Моя проблема в том, как я могу узнать, какое устройство на моем ноутбуке поддерживает DMA. Я попытался отключить USB-устройства и отключить ноутбук от док-станции. У моего коллеги такая же модель ноутбука, и у него нет такой же проблемы, как у меня.
Системная информация
OS Name Microsoft Windows 10 Enterprise
Version 10.0.16299 Build 16299
Other OS Description Not Available
OS Manufacturer Microsoft Corporation
System Name NB-SOKRE
System Manufacturer LENOVO
System Model 20L7S02M00
System Type x64-based PC
System SKU LENOVO_MT_20L7_BU_Think_FM_ThinkPad T480s
Processor Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz, 2112 Mhz, 4 Core(s), 8 Logical Processor(s)
BIOS Version/Date LENOVO N22ET37W (1.14 ), 22.5.2018.
SMBIOS Version 3.0
Embedded Controller Version 1.08
BIOS Mode UEFI
BaseBoard Manufacturer LENOVO
BaseBoard Model Not Available
BaseBoard Name Base Board
Platform Role Mobile
Secure Boot State On
PCR7 Configuration Bound
Windows Directory C:\Windows
System Directory C:\Windows\system32
Boot Device \Device\HarddiskVolume1
Locale United States
Hardware Abstraction Layer Version = "10.0.16299.371"
User Name 3PRO\kkljucaric
Time Zone Central European Daylight Time
Installed Physical Memory (RAM) 16,0 GB
Total Physical Memory 15,8 GB
Available Physical Memory 7,02 GB
Total Virtual Memory 18,2 GB
Available Virtual Memory 5,31 GB
Page File Space 2,38 GB
Page File C:\pagefile.sys
Virtualization-based security Running
Virtualization-based security Required Security Properties Base Virtualization Support, Secure Boot, DMA Protection
Virtualization-based security Available Security Properties Base Virtualization Support, Secure Boot, DMA Protection, Secure Memory Overwrite, UEFI Code Readonly, SMM Security Mitigations 1.0
Virtualization-based security Services Configured Credential Guard
Virtualization-based security Services Running Credential Guard
Windows Defender Device Guard Code Integrity Policy Audit
Windows Defender Device Guard user mode Code Integrity Audit
Device Encryption Support Reasons for failed automatic device encryption: Un-allowed DMA capable bus/device(s) detected
A hypervisor has been detected. Features required for Hyper-V will not be displayed.
8 ответов
Оказывается, вам не нужно использовать процесс исключения, чтобы узнать, какую шину добавить в список разрешенных, это можно сделать в сообщении средства просмотра событий.
- Откройте средство просмотра событий.
- Выберите Журналы приложений и служб -> Microsoft -> Windows -> BitLocker-API -> Управление.
- Найдите элемент «Информация» с событием 4122: в нем будет текст примерно такого содержания:
The following DMA (Direct Memory Access) capable devices are not declared as protected from external access, which can block security features such as BitLocker automatic device encryption:
ISA Bridge:
PCI\VEN_8086&DEV_A30D (Intel(R) 300 Series Chipset Family LPC Controller (HM370) - A30D)
PCI-to-PCI Bridge:
PCI\VEN_8086&DEV_A334 (Intel(R) PCI Express Root Port #13 - A334)
PCI\VEN_8086&DEV_A337 (Intel(R) PCI Express Root Port #16 - A337)
PCI\VEN_8086&DEV_A343 (Intel(R) PCI Express Root Port #20 - A343)
PCI\VEN_8086&DEV_A330 (Intel(R) PCI Express Root Port #9 - A330)
PCI\VEN_8086&DEV_1901 (Intel(R) Xeon(R) E3 - 1200/1500 v5/6th Gen Intel(R) Core(TM) PCIe Controller (x16) - 1901)
PCI\VEN_8086&DEV_A336 (Intel(R) PCI Express Root Port #15 - A336)
Это те элементы, которые вам нужно будет добавить в список «Утверждено», если они не создают уязвимости безопасности (например, я думаю, они недоступны извне?)
Если есть еще люди, пытающиеся решить эту проблему... Мне было лень, поэтому я создал небольшой PS-скрипт, который генерирует .reg-файл (со всеми найденными устройствами PCI) в каталоге tmp, а затем импортирует его автоматически.
$tmpfile = "$($env:TEMP)\AllowBuses.reg"
'Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses]'`
| Out-File $tmpfile
(Get-PnPDevice -InstanceId PCI* `
| Format-Table -Property FriendlyName,InstanceId -HideTableHeaders -AutoSize `
| Out-String -Width 300).trim() `
-split "`r`n" `
-replace '&SUBSYS.*', '' `
-replace '\s+PCI\\', '"="PCI\\' `
| Foreach-Object{ "{0}{1}{2}" -f '"',$_,'"' } `
| Out-File $tmpfile -Append
regedit /s $tmpfile
Оттуда вы можете начать удалять добавленные записи через regedit одну за другой, одновременно обновляя страницу с информацией о системе и снова проверяя, какая запись делает ее несовместимой. Это быстрее, чем добавлять записи вручную :) Для меня отсутствовала запись для «Порт нисходящего коммутатора PCI Express». "
Возможно, вам придется изменить разрешения для этого ключа (добавьте своего пользователя или группу в качестве владельца ключа), поскольку Microsoft также имеет это в своем руководстве здесь:
https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-bitlocker
Microsoft предоставляет эту документацию об этом сообщении.
И черный список, и белый список находятся в вашем реестре на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity
, Я не знаю об автоматизированном процессе, чтобы проверить это, хотя его создание должно быть довольно простым.
Типичным кандидатом, который существует в большинстве систем, является "мост PCI-PCI". Любопытно, что "PCI Express Root Complex" находится в AllowedBuses
а также UnallowedBuses
,
В моем случае мне просто нужно было занести в белый список мою видеокарту. Вот процесс, которому я следовал, чтобы сделать это.
Найти проблемное устройство
- Откройте компьютер и физически отключите все дополнительные устройства от материнской платы (например, жесткие диски, твердотельные накопители, карты PCIe)
- Запустите компьютер и снова запустите отчет System Information, чтобы увидеть, исчезла ли ошибка
- Если ошибка все еще присутствует, то мои инструкции, вероятно, не помогут
- Если ошибка отсутствует, добавьте только одно из удаленных устройств.
- Повторите с шага 2
В конце концов вы можете обнаружить, что повторное добавление одного конкретного устройства приводит к появлению ошибки. Запишите, какое это устройство.
Проверьте, есть ли у него внешний DMA
Посмотрите шифрование диска BitLocker в Windows 10 для OEM-производителей, чтобы определить, имеет ли ваше устройство внешний DMA. Если это так, то действуйте на свой страх и риск. В противном случае, вы можете продолжить.
Получить идентификаторы устройства
- Открыть диспетчер устройств
- Найти устройство
- Дважды щелкните по нему
- Установить свойство на родительский
Скопируйте значение
Белый список устройства
- ОткрытьRegedit
- Перейдите к
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses
- Предоставьте себе доступ для изменения ключа реестра
- Щелкните правой кнопкой мышиAllowedBuses и перейдите вРазрешения
- Сделай себя владельцем
- НажмитеAdvanced
- Рядом свладельцем, запишите, что он говорит (мой сказалСИСТЕМА)
- Рядом свладельцем нажмитеИзменить
- Введите ваше имя пользователя (например, адрес электронной почты вашей учетной записи Microsoft)
- НажмитеОК
- Предоставь себе доступ
- НажмитеДобавить
- Введите ваше имя пользователя (например, адрес электронной почты вашей учетной записи Microsoft)
- НажмитеОК
- Выберите своего пользователя
- TickFull Control
- НажмитеОК
- ПодAllowedBuses создайте новоестроковоезначение
- Перезагрузите компьютер
- Запустить информацию о системе
- Убедитесь, что ошибка исчезла
- Вернитесь в реестр и отмените изменения разрешений, которые вы сделали
Для меня удаление
«Мост ISA» и «Мост PCI-PCI»
от
[Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\Default\UnallowedBuses]
исправил это на Lenovo L15 20U8.
Есть еще одна причина появления сообщения «Обнаружена запрещенная шина/устройство с поддержкой DMA», как это наблюдалось в моей системе Windows 10: использование другого менеджера загрузки.
Короче говоря, я нашел на своем ноутбуке Dell дополнительный диск емкостью 27 ГБ, который казался неиспользованным, поэтому я установил туда Ubuntu. Но мне пришлось сначала отключить шифрование на диске C. Когда установка была завершена, и я загрузился в Windows из диспетчера загрузки grub, опция «Шифрование устройства» исчезла из « Система»> «Обновления и безопасность». Решением было зайти в BIOS и выбрать загрузку Windows, которая обходит grub, и эта опция появилась снова, что позволило мне повторно зашифровать диск. Как и ожидалось, мое монтирование Windows в Ubuntu больше не было видно.
Как бы то ни было, причина, по которой я это сделал, заключалась в том, что я хотел, чтобы система разработки Linux преодолела ограничения WSL. Отсутствие официального клиента Linux для моего облачного диска в Linux, который был моим планом для обмена данными между Windows и Linux, сделало двойную загрузку менее желательным вариантом.
Сейчас у меня есть легкий сервер Ubuntu, установленный на виртуальной машине VirtualBox. Я запускаю его в безголовом режиме, что позволяет мне закрыть VirtualBox, чтобы он не занимал место на панели задач, как будто его там даже нет, кроме случаев, когда резко возрастает загрузка процессора и вентиляторы перегружены, но это исправлялось понижением Ограничение выполнения в настройках ВМ. Затем я подключаюсь к нему по SSH напрямую из PowerShell, WSL не требуется. Прелесть этого в том, что я могу предоставить ему мостовой адаптер, чтобы DHCP назначал ему выделенный IP-адрес, что позволяет мне удобно получать доступ к веб-серверу в докере без ограничений и проблем, которые я видел в WSL . Кроме того, я могу смонтировать папку облачного диска на виртуальной машине и получить доступ ко всем файлам. Мне потребовалось некоторое время, чтобы выбрать среду разработки с лучшими возможностями Linux и Windows 10, поэтому я надеюсь, что это будет полезно.
У меня все еще есть физическая машина с Ubuntu с двойной загрузкой grub, но я изменил настройку BIOS, чтобы она сначала переходила в диспетчер загрузки Windows и, следовательно, прямо в Windows. Мне нравится уверенность в том, что настройки шифрования говорят мне, что шифрование включено.
Я знаю, что это старая версия, но я создал сценарий, который будет анализировать журнал событий и добавлять необходимые идентификаторы оборудования DMA в список разрешенных только в том случае, если это кому-то понадобится.
#Get message
$message = get-winevent -LogName 'Microsoft-Windows-BitLocker/BitLocker Management' | where {$_.ID -eq 4122} | select -first 1
#Take .Message. Split on Carriage Return to return line-by-line
$messageSplit = $message.Message.split("`r")
$results = @()
#For loop dynamicaly set to length of $messageSplit
for ($i = 0; $i -le $messageSplit.Length; $i++) {
IF($messageSplit[$i] -match 'PCI\\VEN'){
$results += $messageSplit[$i].Split("(")[0].trim()
}
}
foreach($r in $results)
{
New-ItemProperty -PropertyType string -Path HKLM:\system\CurrentControlSet\Control\DmaSecurity\AllowedBuses -Name $r -Value $r
}
Мне удалось устранить это сообщение об ошибке, обнаруженное в средстве просмотра событий:
Следующие устройства с поддержкой DMA (прямой доступ к памяти) не объявлены защищенными от внешнего доступа, что может блокировать функции безопасности, такие как автоматическое шифрование устройств BitLocker:
Мост ISA: PCI\VEN_8086&DEV_068E (контроллер Intel(R) LPC (WM490) — 068E)
Мост PCI-PCI: PCI\VEN_8086&DEV_06BD (корневой порт Intel(R) PCI Express #6 — 06BD) PCI\VEN_8086&DEV_06AC (корневой порт Intel(R) PCI Express #21 — 06AC) PCI\VEN_8086&DEV_06C0 (Intel(R) PCI Корневой порт Express #17 – 06C0) PCI\VEN_8086&DEV_15EA (нисходящий порт коммутатора PCI Express) PCI\VEN_8086&DEV_15EA (нисходящий порт коммутатора PCI Express) PCI\VEN_8086&DEV_15EA (нисходящий порт коммутатора PCI Express) PCI\VEN_8086&DEV_15EA (нисходящий порт коммутатора PCI Express) PCI\VEN_8086&DEV_15EA (восходящий порт коммутатора PCI Express) PCI\VEN_8086&DEV_1901 (контроллер Intel(R) PCIe (x16) — 1901) PCI\VEN_8086&DEV_06B8 (корневой порт Intel(R) PCI Express #1 — 06B8)
войдя в BIOS и отключив «Быструю загрузку», и все заработало. Я делал это на мобильной рабочей станции HP ZBook Fury 15 G7.