• 用户模式驱动模型(UMDF)简介


    微软在新一代Windows驱动开发包WDK中提供了一种新的驱动模型:用户模式驱动模型(UMDF)。

    UMDF和传统的驱动程序差异非常大,简要说来,UMDF是这样的:

    • UMDF是基于COM思想的,运行于用户模式(RING3)的驱动程序模块。

    那么,这种驱动模型带来什么变化呢?

    首先基于COM思想,引入接口机制,可以把相关联的函数分门别类进行组织,使得驱动代码清晰明了;其次,运行在RING3的驱动,大幅度降低了驱动程序在稳定性和安全性上面的风险,UMDF驱动崩溃不会导致bugcheck(蓝屏),并且UMDF驱动的宿主进程是在受限的用户身份下运行的,不是受信任的系统内核模块。可以在UMDF里面使用Win32 API。

    运行于RING3的UMDF对于程序员开说至少带来两个额外好处:

    • 驱动程序不需要强制数字签名,因为UMDF驱动不是系统信任模块,所以在x64下面的部署更加方便。特别是个人开发者可能无法承受WHQL的费用,或者其他原因暂时无法WQHL的情况下,使用UMDF是一个较好的选择。
    • 调试难度大幅降低,不再需要SoftICE和Syser之类的单机内核调试器或者WinDBG之类的双机调试,我们可以用WinDBG或者VS调试器attach到UMDF宿主进程即可进行调试。可以参考调试UMDF驱动

    UMDF的局限

    以上简要介绍了UMDF的种种优势,下面来说说UMDF的局限性。UMDF由于是一种较新的驱动程序模型,所以其功能还在不断的演变和增加,但是至少在目前的情况下,UMDF还是受到较大限制的:

    • 无法直接访问硬件,不能直接处理中断,无法DMA。
    • 无中断计时循环,因为RING3代码会随时被系统调度。
    • 无法访问系统内核数据和系统内存空间。
    • 无法作为系统内核驱动栈的一层。

    可见受到的限制是很大的,那么什么最适合使用UMDF呢?简单的说,新开发的驱动如果UMDF能满足需要就使用UMDF。目前,使用UMDF最多的是USB驱动。

    USB驱动是一类最繁杂的驱动,包括很多个子类,其中HID类由于可能参与系统自举和涉及到安全问题,是不能用UMDF的,和系统内核流接口打交道也不能用UMDF。如果我们只是为了给自己的MP3播放器,手机管理软件,数码相机,数据采集设备等编写驱动,那么就可以采用UMDF。

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/skogkatt/p/4163379.html
Copyright © 2020-2023  润新知