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

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激