Включение повторного сопоставления DMA для драйверов устройств

Чтобы обеспечить совместимость с защитой DMA ядра и политикой DMAGuard, драйверы устройств PCIe могут перенаправляться на прямой доступ к памяти (DMA).

Переназначение DMA для драйверов устройств защищает как от повреждения памяти, так и от вредоносных атак DMA и обеспечивает более высокий уровень совместимости для устройств. Кроме того, устройства с драйверами, совместимыми с DMA, могут запускать и выполнять DMA независимо от состояния экрана блокировки.

В системах с включенной защитой ядра от атак DMA политика DMAGuard может блокировать устройства с драйверами, несовместимыми с перенаправлением DMA, подключенными к внешним портам PCIe (например, M.2, Thunderbolt), в зависимости от значения политики, установленного системным администратором.

Требования к драйверу для включения и согласия на повторную настройку DMA

Драйверы выполняют DMA с помощью следующих интерфейсов:

Чтобы настроить политику повторного сопоставления DMA для драйвера, добавьте директиву INF. Существует два возможных метода: механизм для каждого устройства (рекомендуемый и предпочтительный) и механизм для каждого драйвера (устаревшая версия).

Механизм индивидуального согласия для каждого устройства

Для Windows 24H2 и более поздних версий используйте этот метод для каждого устройства. Согласие на устройство переопределяет устаревший метод для каждого драйвера, если он присутствует (например, ключ DmaRemappingCompatible игнорируется, если задан параметр RemappingSupported ).

Добавьте директиву INF, например следующую, в раздел перечисления устройств:

[MyDriver_Device.NT.HW]
AddReg=DMA_Remapping_OptIn_AddReg

[DMA_Remapping_OptIn_AddReg]
HKR,"DMA Management","RemappingSupported",0x00010001,1

Возможные значения для менеджмента DMA\RemappingSupported:

Ценность Значение
0 Отключение указывает, что устройство и драйвер несовместимы с переназначением DMA.
1 Опция "Opt-in" означает, что устройство и драйвер полностью совместимы с переназначением DMA.
Отсутствует ключ реестра Позвольте системе определить политику.

При необходимости можно добавить remappingFlags для дальнейшего управления поведением:

[DMA_Remapping_OptIn_AddReg]
HKR,"DMA Management","RemappingSupported",0x00010001,1
HKR,"DMA Management","RemappingFlags",0x00010001,0x00000001

Допустимые значения для управление DMA\RemappingFlags:

Ценность Значение
0 Если значение RemappingSupported равно 1, выберите условно.
1 Если значение RemappingSupported равно 1, включите, но только в том случае, если выполняется одно или несколько следующих условий: A. Устройство является внешним устройством (например, Thunderbolt); Б. Проверка DMA включена в Driver Verifier
Отсутствует ключ реестра Совпадает со значением 0.

Эти ключи реестра находятся в дереве перечисления: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\<device instance path>\Device Parameters\DMA Management

Механизм добровольного выбора для каждого водителя

Этот метод для отдельных драйверов используется только для версий Windows до, но не включая Windows 11 23H2. Используйте метод для каждого устройства.

Добавьте директиву INF в раздел установки службы, например, следующую:

[MyServiceInstall_AddReg]
HKR,Parameters,DmaRemappingCompatible,0x00010001,1    ; where 1 = opt in

Допустимые значения для DmaRemappingCompatible:

Ценность Значение
0 Отказ от использования указывает, что ваш драйвер несовместим с перемежением DMA.
1 Указывает, что выбранный вами драйвер полностью совместим с переназначением DMA.
2 Согласие, но только в том случае, если выполняется одно или несколько следующих условий: A. Устройство является внешним устройством (например, Thunderbolt); Проверка DMA включена в средство проверки драйверов
3 Согласиться
Отсутствует ключ реестра Позвольте системе определить политику.

При тестировании драйвера включите средство проверки драйверов. В целях тестирования в разделе "Проверка драйверов" значение директивы INF для выборов на внешних устройствах повышено до 1.

Раздел реестра отображается в дереве установки службы: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<driver name>\Parameters.

Предупреждение

Переназначка DMA не поддерживается для драйверов графических устройств.

Примечание.

Добавлена поддержка значения 3 в Windows 11. Эта функция предназначена для снижения производительности в Windows 10, где эта поддержка отсутствует, показывая значение 2 вместо 3 на устройстве с Windows 10.

Проверка того, что переназначение DMA включено для определенного экземпляра драйвера устройства

Используйте последнюю сборку Windows с VT-d/AMD-Vi с поддержкой тестирования функциональных возможностей драйверов в системах Intel x64 и AMD64.

Чтобы проверить, выбрал ли конкретный драйвер перенаправление DMA, в Диспетчере устройств, на вкладке Сведения устройства, посмотрите значения, соответствующие свойству политики перенаправки DMA. Драйвер может запросить свойство DEVPKEY_Device_DmaRemappingPolicy, чтобы определить функциональность повторного распределения DMA устройства. Ознакомьтесь с потенциальными возвращаемыми значениями на этой странице и обратите внимание, что эти возвращаемые значения не совпадают со значениями DmaRemappingCompatible , перечисленными в предыдущем разделе.

Снимок экрана: вкладка сведений диспетчера устройств с свойством политики перенаправки DMA для устройства PCI.

Примечание.

Для Windows 10 версии 1803 и 1809 поле свойств в Диспетчере устройств использует GUID {83da6326-97a6-4088-9453-a1923f573b29}[18]