User-Mode Driver Framework ( UMDF ) — это платформа разработки драйверов устройств, впервые представленная в операционной системе Windows Vista от Microsoft , а также доступная для Windows XP . Она облегчает создание драйверов для определенных классов устройств. [1]
Стандартные драйверы устройств могут быть сложными в написании, поскольку они должны обрабатывать очень широкий спектр состояний системы и устройств, особенно в многопоточной программной среде. Плохо написанные драйверы устройств могут нанести серьезный ущерб системе (например, BSoD или повреждение данных), поскольку все стандартные драйверы имеют высокие привилегии при прямом доступе к ядру. Структура драйверов пользовательского режима изолирует ядро от проблем прямого доступа драйвера, вместо этого предоставляя новый класс драйверов с выделенным интерфейсом прикладного программирования на уровне пользователя прерываний и управления памятью. Если возникает ошибка, новая структура позволяет немедленно перезапустить драйвер, не влияя на систему. Это особенно полезно для устройств, которые периодически подключаются к системе или поддерживают горячую замену через шинную технологию, такую как USB или FireWire .
По данным Microsoft, драйверы UMDF проще в написании и отладке, чем драйверы режима ядра. [2] Однако UMDF не следует использовать для устройств с высокой производительностью или с большим количеством состояний .
Первая версия UMDF была отправлена как часть Windows Media Player версии 10 12 октября 2004 г. Под кодовым названием «Crescent» она была разработана для поддержки драйвера Media Transfer Protocol , и для нее не было предоставлено никаких общедоступных интерфейсов или документации. Позже Microsoft решила превратить UMDF в платформу разработки драйверов устройств. [3]
Драйвер UMDF — это DLL, основанная на модели компонентных объектов (COM) Microsoft. Однако UMDF не использует COM для загрузки, выгрузки или управления параллелизмом ; он использует COM только как шаблон программирования , например, эксплуатируя интерфейс IUnknown COM . При запуске UMDF вызывает DllGetClassObject , чтобы получить указатель на интерфейс IClassFactory в драйвере, а затем использует метод CreateInstance интерфейса IClassFactory для создания экземпляра объекта обратного вызова драйвера.
Объект драйвера является экземпляром интерфейса IWDFDriver , предоставляемого фреймворком . Драйвер предоставляет набор обратных вызовов через интерфейс COM IDriverEntry , который является основной точкой входа для настройки драйвера.