Поделиться через


Просмотр объектов 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 версии 2, вместо этого следует использовать расширения отладчика Wdfkd.dll. Дополнительные сведения см. в разделе Расширения Платформы драйверов Windows (Wdfkd.dll).

Для просмотра сведений об объектах UMDF версии 1 можно выполнить следующие действия:

  1. Используйте одно из следующих расширений отладчика UMDF для просмотра стеков устройств, которые находятся в хост-процессе:

    • !wudfext.umdevstacks

    • !wudfext.umdevstack , как показано в следующем примере:

      !wudfext.umdevstack <dev-stack-addr>

      Эти сведения включают объекты драйверов и устройства для каждого драйвера. В настоящее время UMDF позволяет использовать только один стек устройств в хост-процессе, поэтому нет никакой разницы между выходными данными этих двух расширений.

  2. Просмотрите полное дерево объектов с помощью расширения отладчика UMDF !wudfext.wudfobject , как показано в следующем примере:

    !wudfext.wudfobject <IWDFDriver*> 1

  3. Используйте расширение отладчика UMDF !wudfext.wudfdevice, как показано в следующем примере, чтобы определить Plug and Play (PnP) и состояние управления питанием устройства:

    !wudfext.wudfdevice <IWDFDevice*>

  4. Чтобы определить очереди, связанные с устройством, выполните следующие действия.

    1. Используйте расширение отладчика UMDF с помощью !wudfext.wudfdevicequeues для просмотра очередей, связанных с устройством. Это расширение показывает свойства очереди, состояние очереди и запросы, принадлежащие драйверу.

    2. Используйте расширение отладчика UMDF с помощью !wudfext.wudfqueue , как показано в следующем примере, чтобы получить сведения о каждой очереди:

      !wudfext.wudfqueue <IWDFIoQueue*>

  5. Используйте расширение отладчика UMDF !wudfext.wudfrequest для получения сведений о конкретном запросе. Эти сведения включают базовый пакет запросов ввода-вывода в пользовательском режиме (IRP). На основе сведений об IRP в пользовательском режиме можно определить, где в данный момент обрабатывается запрос в стеке. Вы также можете использовать расширение отладчика UMDF !wudfext.umirp для получения этих сведений об IRP в пользовательском режиме.

  6. Определите все целевые объекты ввода-вывода, выполнив:

    1. Использование расширения отладчика UMDF !wudfext.wudfobject для просмотра дочерних объектов объекта устройства. Целевые объекты ввода-вывода являются дочерними объектами объекта устройства.

    2. Использование расширения отладчика UMDF !wudfext.wudfiotarget , как показано в следующем примере, для просмотра сведений о каждом целевом объекте ввода-вывода:

      !wudfext.wudfiotarget <IWDFTarget*>

      Это расширение показывает состояние целевого объекта и список отправленных запросов.

    В настоящее время нет расширения отладчика UMDF, позволяющего просматривать все целевые объекты ввода-вывода.

  7. Используйте следующие расширения отладчика UMDF для просмотра сведений об объектах файлов:

    !wudfext.wudfrequest или !wudfext.umirp
    Используйте расширение отладчика UMDF !wudfext.wudfrequest или !wudfext.umirp для просмотра файлов, которые являются дочерними объектами объектов устройства.

    !wudfext.wudffile
    Используйте расширение отладчика UMDF !wudfext.wudffile , как показано в следующем примере, для просмотра сведений о файле платформы:

    !wudfext.wudffile <IWDFFile*>

    !wudfext.umfile
    Используйте расширение отладчика UMDF ! wudfext.umfile , как показано в следующем примере, для просмотра сведений о файле внутри стека UMDF (т. е. объект файла, созданный драйвером в стеке в отличие от объекта файла, созданного приложением или драйвером в другом стеке):

    Надстройка !wudfext.umfile <>

    В некоторых случаях может не быть соответствующего файла платформы, а сведения об IRP в пользовательском режиме могут включать внутритековый файл UMDF.

    Сведения, отображаемые в файле !wudfext.umfile , включают все IRP, помещенные в очередь в файл внутри стека UMDF. Только файлы, созданные драйверами, отслеживают пользовательский режим IRP, которые помещаются в очередь этих файлов. Для файлов, созданных приложением, диспетчер ввода-вывода отслеживает irP режима ядра.

    !wudfext.umdevstacks и !wudfext.umdevstack
    Используйте выходные данные расширений отладчика !wudfext.umdevstacks и !wudfext.umdevstack UMDF для просмотра необработанных файлов внутри стека UMDF, соответствующих файлам, созданным драйвером.