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


Руководство по написанию универсального драйвера Windows (UMDF 2) на основе шаблона

В этом разделе описывается, как написать универсальный драйвер Windows с помощью User-Mode Driver Framework (UMDF) 2. Вы начнете с шаблона Microsoft Visual Studio, а затем развернете и установите драйвер на отдельном компьютере.

Необходимые условия

  • Выполните действия по установке комплекта драйверов Windows (WDK). Средства отладки для Windows включены в состав WDK.

  • Установите Visual Studio 2022. При установке Visual Studio 2022 выберите рабочую нагрузку Разработка приложений для рабочего стола с использованием C++, а затем в разделе Отдельные компоненты добавьте:

    • MSVC версии 143 — библиотеки VS 2022 C++ ARM64/ARM64EC с защитой от уязвимостей Spectre (последняя версия)
    • MSVC версия 143 — библиотеки VS 2022 C++ x64/x86 с предотвращением уязвимостей Spectre (последняя версия)
    • ATL C++ для последних средств сборки версии 143 с устранением рисков Spectre (ARM64/ARM64EC)
    • ATL C++ для последних сборочных инструментов v143 с митигацией уязвимостей Spectre (x86 & x64)
    • C++ MFC для средств сборки версии v143 с мерами по снижению риска Spectre (ARM64/ARM64EC)
    • C++ MFC для новейших средств сборки версии v143 с мерами по устранению Spectre (x86 & x64)
    • Комплект драйверов Windows

Создание и сборка драйвера

Заметка

При создании нового драйвера KMDF или UMDF необходимо выбрать имя драйвера с 32 символами или меньше. Это ограничение длины определяется в wdfglobals.h.

  1. Откройте Visual Studio. В меню файла выберите "Создать >проект".

  2. В диалоговом окне Создание проекта выберите C++ в раскрывающемся списке слева, выберите Windows в среднем раскрывающемся списке и выберите Driver в правом раскрывающемся списке.

  3. Выберите драйвер пользовательского режима (UMDF версии 2) из списка типов проектов. Выберите Далее.

    снимок экрана диалогового окна нового проекта с выбранным драйвером пользовательского режима.

    Совет

    Если вы не можете найти шаблоны проектов драйверов в Visual Studio, расширение WDK Visual Studio не было установлено должным образом. Чтобы устранить эту проблему, запустите установщика Visual Studio, выберите Изменить, добавьте комплекты драйверов Windows на вкладке отдельных компонентов и выберите Изменить.

  4. В диалоговом окне Настройка нового проекта введите "UmdfDriver" в поле "Имя проекта".

    Заметка

    При создании нового драйвера KMDF или UMDF необходимо выбрать имя драйвера с 32 символами или меньше. Это ограничение длины определяется в wdfglobals.h.  

  5. В поле расположение введите каталог, в котором нужно создать проект.

  6. Проверьте Разместить решение и проект в том же каталоге и выберите Создать.

    снимок экрана диалогового окна конфигурации проекта.

    Visual Studio создает один проект и решение. В окне обозревателя решений их можно увидеть. (Если окно обозревателя решений не отображается, выберите Обозреватель решений из меню Вид.) В решении есть проект драйвера, названный UmdfDriver. Чтобы просмотреть исходный код драйвера, откройте любой из файлов в разделе исходные файлы. Driver.c и Device.c — хорошие места для начала.

    снимок экрана обозревателя решений с файлами в проекте драйвера.

  7. В окне обозревателя решений выберите и удерживайте (или щелкните правой кнопкой мыши) решение 'UmdfDriver' (1 из 1 проекта)и выберите Configuration Manager. Выберите конфигурацию и платформу для проекта драйвера. Например, выберите отладки и x64.

  8. В окне обозревателя решений выберите и удерживайте (или щелкните правой кнопкой мыши) UmdfDriverи выберите Свойства. Перейдите к разделу Свойства конфигурации > Параметры драйвера > Общиеи обратите внимание, что Целевая платформа по умолчанию Универсальная.

  9. Чтобы создать драйвер, выберите Build Solution в меню Build. Microsoft Visual Studio отображает ход сборки в окне вывода. (Если окно Вывод не отображается, выберите Вывод в меню Вид.)

    Убедитесь, что выходные данные сборки включают:

    >    Driver is 'Universal'.
    

    Когда вы убедились, что решение успешно собрано, можно закрыть Visual Studio.

  10. Чтобы просмотреть собранный драйвер, в Проводнике перейдите в вашу папку UmdfDriver, а затем в x64\Debug\UmdfDriver. Каталог содержит следующие файлы:

    • UmdfDriver.dll — файл драйвера в пользовательском режиме
    • UmdfDriver.inf - информационный файл, который Windows использует при установке драйвера.

Развертывание и установка драйвера универсальной версии Windows

Обычно при тестировании и отладке драйвера отладчик и драйвер выполняются на отдельных компьютерах. Компьютер, на котором запущен отладчик, называется компьютер-хост, а компьютер, на котором запущен драйвер, называется компьютер-цель. Целевой компьютер также называется тестовым компьютером .

Важный

До сих пор вы использовали Visual Studio для создания драйвера на хост-компьютере. Теперь необходимо настроить целевой компьютер. Следуйте инструкциям в подготовке компьютера для развертывания и тестирования драйверов (WDK 10). Затем вы будете готовы к развертыванию, установке, загрузке и отладке драйвера.

  1. На хост-компьютере откройте решение в Visual Studio. Вы можете дважды щелкнуть файл решения UmdfDriver.sln в папке UmdfDriver.

  2. В окне Обозревателя решений выберите и удерживайте (или щелкните правой кнопкой) UmdfDriver и выберите Свойства.

  3. В окне UmdfDriver Страницы свойств перейдите к разделу "Свойства конфигурации Установка драйвера > Развертывание >", как показано здесь.

  4. Проверьте Удалите предыдущие версии драйверов перед развертыванием.

  5. Для имени целевого устройства выберите имя компьютера, настроенного для тестирования и отладки.

  6. Выберите "Обновление драйвера идентификатора оборудования"и введите идентификатор оборудования для вашего драйвера. В этом упражнении идентификатор оборудования — Root\UmdfDriver. Нажмите кнопку ОК.

    снимок экрана страниц свойств umdfdriver, показывающий выбранную установку драйвера развертывания

    Примечание В этом упражнении идентификатор оборудования не определяет реальный элемент оборудования. Он определяет виртуальное устройство, которому будет назначено место в дереве устройств как дочерний узел корневого узла. Для физического оборудования не выбирайте обновление драйвера идентификатора оборудования ; вместо этого выберите «Установить и проверить» . Идентификатор оборудования можно увидеть в файле сведений о драйвере (INF). В окне Обозреватель решений перейдите к файлам драйверов UmdfDriver>, и дважды щелкните UmdfDriver.inf. Идентификатор оборудования находится в разделе [Standard.NT$ARCH$].

    [Standard.NT$ARCH$]
    %DeviceName%=MyDevice_Install,Root\UmdfDriver
    
  7. В меню Отладка выберите Начать отладкуили нажмите клавишу F5 на клавиатуре.

  8. Подождите, пока драйвер не будет развернут, установлен и загружен на целевом компьютере. Это может занять несколько минут.

Использование платформы модулей драйверов (DMF)

Driver Module Framework (DMF) — это расширение для WDF, которое предоставляет дополнительные функциональные возможности для разработчика драйвера WDF. Это помогает разработчикам писать любой тип драйвера WDF лучше и быстрее.

DMF в качестве платформы позволяет создавать объекты WDF, называемые модулями DMF. Код для этих модулей DMF можно совместно использовать между различными драйверами. Кроме того, DMF объединяет библиотеку модулей DMF, которые мы разработали для наших драйверов и чувствуем, что обеспечит ценность для других разработчиков драйверов.

DMF не заменяет WDF. DMF — это вторая платформа, используемая с WDF. Разработчик, использующий DMF, по-прежнему использует WDF и все его примитивы для записи драйверов устройств.

Дополнительные сведения см. в разделе Driver Module Framework (DMF).

разработка, тестирование и развертывание драйверов

Инструменты для отладки Windows

Напишите ваш первый драйвер