Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2676176
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: Windows平台

2015-05-27 11:18:10

Windows驱动_UMDF驱动之一UMDF驱动架构
http://blog.csdn.net/z18_28_19/article/details/12069211

关于UMDF的文章还要继续,微软讲得太多了,后面会继续,本来想只用一章的,但是这样的话这个文章太长了,所以我打算尽量用5个章节来说明整个UMDF的框架。这里只是最最简单的理解,如果要认真的理解,请多实践。每个人的理解都不一样,这跟每个人的经历和工作都有关系,这里写这些文章。后面,我会根据自己的再次理解,而随时来调整文章。我始终认为,书看一次,绝对不够,看一下,过一两个月,再看,应该比第一次好点,再然后,再看,直到真正理解。


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


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


            如果你的UMDF驱动使用的UMDF1.11以后的版本,运行在Windows8或以后的系统上,驱动管理器默认创建一个Wudfhost.exe实例,它可以主持多个设备堆栈,这个技术叫做设备池。


            如果你的UMDF驱动使用的UMDF2.0的版本,运行在Windows8.1,池也是默认的。


            如果你的UMDF驱动使用的UMDF1.9或者更早的版本,框架为每一个设备堆栈创建一个独立主持进程Wudfhost.exe的实例。


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


            你可以装载那些使用版本1和2的UMDF共存的驱动,也可以使用同一个主持进程或不同的主持进程。一般来说,在Windows8.1以后,驱动管理器会把UMDF1.11和UMDF2.0驱动都装载到同一个主持进程。


            但是,你不能在同一个设备堆栈中同时加载UMDF1.11和UMDF2.0驱动。所以,你不能够将UMDF版本1的过滤驱动加载到UMDF版本2功能驱动的上面。


            Architecture of UMDF


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


           


            跟内核模式堆栈一样,用户模式堆栈的建造和卸载都是通过PNP事件来处理。在内核模式堆栈已经建立以后,反射器通知驱动管理器,开始构建用户模式驱动堆栈。驱动管理器启动驱动主持进程,并给其足够的信息,来构建用户模式堆栈。用户模式堆栈可以看作是内核模式堆栈的扩展。

           驱动主持进程为用户模式驱动提供执行环境,并在用户模式堆栈中的驱动间传送消息。反射器使用基于消息的内部进行通信体系和驱动管理器和驱动主持进程进行交互。


           为了发送IO请求给UMDF驱动,应用程序可以调用Win32 IO函数,比如CreateFile,ReadFileEx,CancelloEx或DeviceIoControl。但反射器接受到一个来自应用程序的一个请求的时候,它发送请求到合适的驱动主持进程。然后,驱动主持进程将请求发送到正确的用户模式设备堆栈的最上层驱动。


           请求可以被用户模式堆栈的驱动直接结束,或者由用户模式驱动转发给反射器。当反射器接收到一个来自用户模式驱动堆栈的请求时,它发送请求到内核模式驱动堆栈进行处理。

阅读(2051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~