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


Архитектура UMDF

В этом разделе описывается, как диспетчер драйверов создает стек устройств в пользовательском режиме и как главный процесс, отражатель и диспетчер драйверов обрабатывают запросы ввода-вывода, которые приложение отправляет в драйвер User-Mode Driver Framework (UMDF).

Как и в случае со стеком в режиме ядра, построение и удаление стека пользовательского режима осуществляется с помощью событий Plug and Play (PnP). После создания стека в режиме ядра отражатель уведомляет диспетчера драйверов о начале создания стека в пользовательском режиме. Диспетчер драйверов запускает процесс узла драйвера и предоставляет достаточные сведения для запущенного процесса для создания стека в пользовательском режиме. Таким образом, стек пользовательского режима можно считать расширением стека режима ядра.

Процесс узла драйвера предоставляет среду выполнения для драйверов пользовательского режима и маршрутизирует сообщения между драйверами в стеке пользовательского режима. Рефлектор использует механизм межпроцессного взаимодействия на основе сообщений для взаимодействия с диспетчером драйверов и ведущим процессом.

Компоненты umdf, включая объекты устройств вверх и вниз в отражателе.

Чтобы отправить запрос ввода-вывода в драйвер UMDF, приложение вызывает функцию ввода-вывода файла Win32, например CreateFile, ReadFileEx, CancelIoEx или DeviceIoControl. Когда отражатель получает запрос от клиентского приложения, он отправляет запрос в соответствующий хост-процесс драйвера. Затем хост-процесс драйвера направляет запрос в верхнюю часть правильного стека устройств в пользовательском режиме.

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