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

相关文章

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar