Преимущества написания драйверов UMDF
В этом разделе описываются преимущества написания драйвера User-Mode Driver Framework (UMDF) вместо драйвера в режиме ядра.
При написании драйвера UMDF вы получаете следующие преимущества:
Драйверы UMDF способствуют повышению стабильности операционной системы, так как они имеют доступ только к диапазону адресов процесса, в котором они выполняются.
Так как драйверы UMDF выполняются под учетной записью LocalService , они имеют ограниченный доступ к данным пользователя или к системным файлам.
Драйверы пользовательского режима работают в гораздо более простой среде, чем драйверы в режиме ядра. Например, драйверы режима ядра должны учитывать IRQL, ошибки страниц и контекст потока. Однако в пользовательском режиме эти проблемы не существуют. Драйверы пользовательского режима всегда работают в потоке, отличном от процесса запроса, и всегда могут принимать ошибки страниц.
UMDF версии 2 обеспечивает четность функций с KMDF в большинстве областей. Полное сравнение см. в разделе Сравнение функций UMDF 2 с KMDF.
UMDF версии 2 упрощает преобразование между KMDF и UMDF. См. статью Как преобразовать драйвер KMDF в драйвер UMDF 2 (и наоборот).
Вы можете отлаживать драйверы UMDF с помощью отладчика пользовательского режима или , начиная с версии 2, отладчика в режиме ядра.
Вы можете использовать команды расширения Wdfkd.dll отладчика с KMDF и начиная с UMDF версии 2. Дополнительные сведения см. в разделе Расширения отладчика.
Основной целью общей модели WDF является предоставление интеллектуальных значений по умолчанию, чтобы вы могли сосредоточиться на оборудовании устройства и избежать написания кода для выполнения задач, которые являются общими для большинства драйверов.
Для достижения этой цели платформа предназначена для работы с драйверами на основе "согласия". При написании драйвера UMDF вы предоставляете процедуры обратного вызова только для событий, влияющих на устройство. Например, некоторые устройства требуют вмешательства сразу после включения и непосредственно перед отключением. Драйвер для такого устройства может реализовывать функции обратного вызова, которые платформа вызывает в это время.
Драйвер содержит код для обработки только тех событий, для которых его устройство нуждается в поддержке для конкретного устройства. Все остальные события могут обрабатываться платформой по умолчанию.
Кроме того, драйвер может настроить свои очереди запросов ввода-вывода таким образом, чтобы платформа прекратила отправку запросов, пока устройство находится в маломощном состоянии, и возобновила отправку после возвращения устройства в рабочее состояние. Аналогичным образом, если запрос ввода-вывода поступает, когда устройство находится в маломощном состоянии, платформа может автоматически включить устройство.