检测到不允许的 DMA 总线/设备

检测到不允许的 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. 

答案1

事实证明,您不必使用消除法来找出要添加到批准列表中的公交车,它位于事件查看器消息中。

  1. 打开事件查看器。
  2. 选择应用程序和服务日志 -> Microsoft -> Windows -> BitLocker-API -> 管理。事件查看器树
  3. 查找带有事件 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)

那些如果这些项目不会造成安全漏洞(例如,我认为它们无法从外部访问?),您需要将它们添加到“已批准”状态吗?

答案2

如果有更多人尝试解决这个问题......我很懒,所以我创建了一个小型 PS 脚本,它在 tmp 目录中生成 .reg 文件(包含所有找到的 PCI 设备),然后默默地导入它。

$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

答案3

Microsoft 提供本文档关于此消息。

黑名单和白名单都在您的注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity。我不知道是否有一个自动化的流程可以检查这一点,但创建一个应该很容易。

大多数系统中存在的典型候选是“PCI-to-PCI Bridge”。奇怪的是,“PCI Express Root Complex”同时存在于和AllowedBusesUnallowedBuses

答案4

在我的 Windows 10 系统上看到此“检测到不允许的支持 DMA 的总线/设备”消息还有另一个原因:使用不同的启动管理器

长话短说,我在戴尔笔记本电脑上发现了一个额外的 27GB 驱动器,似乎没有使用,所以我在那里安装了 Ubuntu。但我必须先禁用 C 盘上的加密。安装完成后,我从 grub 启动管理器启动到 Windows,“设备加密”选项从系统 > 更新和安全。解决方案是进入 BIOS 并选择绕过 grub 的 Windows Boot,然后该选项再次出现,允许我重新加密驱动器。正如预期的那样,我在 Ubuntu 中的 Windows 安装不再可见。

不管怎样,我这样做的原因是我想要一个 Linux 开发系统来克服 WSL 的限制。我的 Linux 云驱动器(我计划在 Windows 和 Linux 之间共享数据)缺少官方的 Linux 客户端,因此双启动不是一个理想的选择。

我现在有一个安装在 VirtualBox VM 中的轻量级 Ubuntu 服务器。我以无头模式启动它,这样我就可以关闭 VirtualBox,这样它就不会占用任务栏上的空间,就像它不存在一样,除非 CPU 使用率飙升且风扇繁忙,但这个问题已由降低执行上限在虚拟机设置中。然后我直接从 PowerShell 通过 SSH 进入它,不需要 WSL。它的妙处在于,我可以给它一个桥接适配器,这样 DHCP 就会给它分配一个专用的 IP 地址,这样我就可以在 docker 上方便地访问 web 服务器,而无需局限性问题我在 WSL 上看到了。此外,我可以在虚拟机中安装云驱动器文件夹并访问所有文件。我花了一段时间才找到一个具有最佳 Linux 和 Windows 10 的开发环境,所以我希望这对你有帮助。

我仍有一台具有 grub 双启动功能的 Ubuntu 物理机,但我更改了 BIOS 设置,因此它首先进入 Windows 启动管理器,然后直接进入 Windows。我喜欢看到加密设置,告诉我加密已开启,这让我很有信心。

相关内容