Windows驱动_UMDF驱动之一UMDF驱动架构

2024-09-01 03:48
文章标签 windows 驱动 架构 umdf

本文主要是介绍Windows驱动_UMDF驱动之一UMDF驱动架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

    我们知道WDF分UMDF和KMDF框架,因为之前一直在内核模式下,所以一直没有考虑UMDF驱动框架,还有一个原因是可以使用UMDF框架的驱动,都可以使用KMDF框架代替,反之,不然。但是,UMDF因为其运行在用户模式下,所以也有许多便利性,比如:
    1. UMDF增加了系统的稳定性,驱动在用户模式进程地址空间中运行。
    2. 既可以使用用户模式的调试器调试,也可以使用内核模式下的调试器调试。
    3. 因为UMDF运行在LocalService帐号下,是受限的访问用户模式数据和系统文件,增加系统的安全性。

 

二、结构
    UMDF驱动抽象硬件功能,作为驱动堆栈的一部分管理设备,文件系统驱动,显示驱动,和打印机的驱动不能使用UMDF。
    
    UMDF和系统如下的部件进行联系

        Driver host process:UMDF主持进程装载UMDF驱动和框架的DLL,并提供一个执行环境,给UMDF驱动,用户模式堆栈中的消息传递。
        Driver manager:驱动管理器是一个Windows服务,它管理所有Wudfhost驱动主持进程的所有实例。驱动管理器启动每一个驱动主持进行的追踪信息。每一个host都是驱动管理器的子进程。每个系统中只存在一个驱动管理器。驱动管理器启动安装UMDF设备,并在之后运行它。
        Reflector:反射器是一个内核模式驱动,它允许应用程序和驱动主持进行(用户模式设备堆栈)和其进行交互。反射器为每一个设备实例创建一个独立的设备对象。并处理每一个设备PNP事件和电源管理请求。所有的应用程序和驱动主持进程都是通过反射器进行交互的。对于给定的设备的所有函数和过滤驱动必须运行在同一个驱动主持进程中。但是多个主持进程可以并发运行。
        UMDF Driver Host Process:驱动主持进程(Wudfhost.exe)是驱动管理服务的子进程。Wudfhost.exe通常运行在LocalService账户下,在当前的计算机上只拥护最小的权限。Wudfhost.exe的实例装载一个或多个UMDF驱动DLL和框架的DLL.驱动主持进程提供一种运行环境,来处理在驱动管理器和反射器内部间进行内部进程通讯,IO分发,驱动装载,驱动分层,线程池的管理。

 

三、注意点

        1. 驱动管理器可以创建多个共存的Wudfhost.exe进程实例。

        2. 如果你的UMDF驱动使用的UMDF1.9或者更早的版本,框架为每一个设备堆栈创建一个独立主持进程Wudfhost.exe的实例。
            如果你的UMDF驱动使用的UMDF1.11以后的版本,运行在Windows8或以后的系统上,驱动管理器默认创建一个Wudfhost.exe实例,它可以主持多个设备堆栈,这个技术叫做设备池。
            如果你的UMDF驱动使用的UMDF2.0的版本,运行在Windows8.1,池也是默认的。
            你可以装载那些使用版本1和2的UMDF共存的驱动,也可以使用同一个主持进程或不同的主持进程。一般来说,在Windows8.1以后,驱动管理器会把UMDF1.11和UMDF2.0驱动都装载到同一个主持进程。
            但是,你不能在同一个设备堆栈中同时加载UMDF1.11和UMDF2.0驱动。所以,你不能够将UMDF版本1的过滤驱动加载到UMDF版本2功能驱动的上面。

        3. 在Wudfhost.exe内部,每一个UMDF驱动都运行在自己的独立的地址空间,这样就和应用程序和驱动主持进行的实例进行了隔离。

 

四、UMDF架构

        下面,我们来看一下UMDF驱动体系结构,驱动管理器怎样构建用户模式设备堆栈,主持进程,反射器,驱动管理器,怎样来处理用户模式应用程序发送到UMDF驱动的IO请求。


        跟内核模式堆栈一样,用户模式堆栈的建造和卸载都是通过PNP事件来处理。在内核模式堆栈已经建立以后,反射器通知驱动管理器,开始构建用户模式驱动堆栈。驱动管理器启动驱动主持进程,并给其足够的信息,来构建用户模式堆栈。用户模式堆栈可以看作是内核模式堆栈的扩展。
        驱动主持进程为用户模式驱动提供执行环境,并在用户模式堆栈中的驱动间传送消息。反射器使用基于消息的内部进行通信体系和驱动管理器和驱动主持进程进行交互。
        为了发送IO请求给UMDF驱动,应用程序可以调用Win32 IO函数,比如CreateFile,ReadFileEx,CancelloEx或DeviceIoControl。但反射器接受到一个来自应用程序的一个请求的时候,它发送请求到合适的驱动主持进程。然后,驱动主持进程将请求发送到正确的用户模式设备堆栈的最上层驱动。
        请求可以被用户模式堆栈的驱动直接结束,或者由用户模式驱动转发给反射器。当反射器接收到一个来自用户模式驱动堆栈的请求时,它发送请求到内核模式驱动堆栈进行处理。

 

 

 

这篇关于Windows驱动_UMDF驱动之一UMDF驱动架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1125854

相关文章

Windows 系统下 Nginx 的配置步骤详解

《Windows系统下Nginx的配置步骤详解》Nginx是一款功能强大的软件,在互联网领域有广泛应用,简单来说,它就像一个聪明的交通指挥员,能让网站运行得更高效、更稳定,:本文主要介绍W... 目录一、为什么要用 Nginx二、Windows 系统下 Nginx 的配置步骤1. 下载 Nginx2. 解压

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1