Определение причин, по которой драйвер UMDF потребляет избыточный объем памяти
Предупреждение
UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2.
Архивные примеры UMDF 1 можно найти в Windows 11 версии 22H2 — обновление примеров драйверов за май 2022 г.
Дополнительные сведения см. в разделе начало работы с помощью UMDF.
В этом разделе описывается, как использовать расширения отладчика Wudfext.dll в сочетании с драйвером User-Mode Driver Framework (UMDF) версии 1, чтобы определить, почему драйвер UMDF потребляет избыточный объем памяти.
Начиная с UMDF версии 2 вместо этого следует использовать расширения отладчика Wdfkd.dll. Дополнительные сведения см. в разделе Расширения Платформы драйверов Windows (Wdfkd.dll).
Чтобы изучить использование памяти, выполните следующие действия.
Просмотрите выдающийся объект в дереве объектов с помощью расширения отладчика UMDF !wudfext.wudfobject .
Расширение !wudfext.wudfobject отображает сведения об объекте WDF, включая его родительские и дочерние связи. Если задать бит 0 параметра Flags равным 1 (0x01), !wudfext.wudfobject выполняет рекурсивный дамп дерева объектов, коренится в переданном объекте. Чтобы просмотреть полное дерево объектов, используйте следующую команду:
!wudfext.wudfobject <IWDFDriver*> 1
Определите, отображается ли больше незаполненных объектов, чем ожидалось.
В конечном итоге драйвер может привести к утечке этих объектов (дополнительные сведения об утечке объектов WDF см. в разделе Определение, если драйвер утечки объектов платформы).
Эти объекты могут находиться в дереве объектов и, следовательно, будут освобождены. Однако они накапливаются без необходимости. Для этих объектов может потребоваться:
- Исправления родительских объектов.
- Явное удаление с помощью метода IWDFObject::D eleteWdfObject .