zoukankan      html  css  js  c++  java
  • Device Drivers

    Types of Device Drivers

    Windows可能会有User-mode的驱动,但是我们只关注Kernel-Mode的驱动。

    WDM Drivers

    WDM是一种驱动模型,是比较常用的驱动模型。

    WDM可以分为以下几类:

    • Bus Drivers

    负责检测到连接到该总线的设备的与PnP/Power相关的事件,并且通知IO Manager, PnP Manager, Power Manager。

    • Function Drivers

    负责某一具体设备的driver,是狭义上的driver。

    Function Driver是唯一了解某类硬件特性,并且与这类硬件直接(通过调用HAL提供的接口)打交道的driver。

    • Filter Drivers

    过滤驱动,负责修改或者补充某些特定driver的功能。

    Layered Drivers


    Structure of a Driver

    由各种routine构成


    Driver Objects and Device Objects

    加载driver,会调用init routine。

    对于PnP driver,新的设备plug到系统上时,driver的add device routine会被调用,此时driver可以创建一个Device Object;

    对于其他driver,通常driver在init routine时调用IoCreateDevice/IoCreateDeviceSecure创建Device Object;

    对于应用程序来说,它要操作的是Device,它并不知道该Device相对应的Driver。应用程序如果要操作Device,只能按照文件模型来进行操作,比如Read/Write/IOControl。

    而打开文件,必须知道文件的路径,对于Device来说,它们的路径是Device目录下,这个路径是不能被应用程序访问到的,因此需要创建软链接到Global??目录下,这样就可以被应用程序打开了。

    对于PnP设备来说,它们的路径名是动态生成的GUID表示。

    Device Object与Driver Object是互相通过指针关联在一起的。

    Device Object里面保存device queue,里面保存所有发送到该设备上的IRP数据包;

    IO System会将Device Object的device queue中的IRP按照一定的顺序取出,连同Device Object的指针一同传递给Driver Object,由Driver调用相应的routine完成对于IRP的操作。

    Opening Devices

    因为底层设备对于各个用户态的进程来说,属于“临界区”资源,需要同步各个进程的访问。

    所以如果是要向某个设备write数据时,最好是使用exclusive write的权限打开,这样可以阻止别的进程打开这个文件。

    但是这样就把整个文件的内容都锁住了,也可以使用LockFile,可以只锁住文件的一部分,而文件的其他部分是允许其他进程访问的。

  • 相关阅读:
    项目设计之---------- 模版模式利用
    项目设计之一------简单工厂模式利用
    项目设计之----命令模式的利用
    项目设计之一---------- 代码重构
    项目设计之---------- 类的设计原则
    项目设计之一-------------项目包的设计原则(原)
    模式经验/理解
    Java常量定义需要注意事项及static作用(复习)
    H2数据库使用 详解
    开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表( 附加翻译) h2数据库
  • 原文地址:https://www.cnblogs.com/long123king/p/3778132.html
Copyright © 2011-2022 走看看