zoukankan      html  css  js  c++  java
  • windows 2000/xp WDM设备驱动程序开发 (1)

     0. 参考文献

    《windows WDM 设备驱动程序开发指南》《programming the microsoft windows driver model》

    《windows 2000驱动程序开发大全》

    使用driverworks工具(driverStudio),而没有用DDK,因为更快捷

    1. WDM驱动

     例程

     

     页故障:软件级别中断,运行在DISPATCH_LEVEL上; 所以访问DISPATCH_LEVEL的代码需运行在非分页内存

    1.3 设备接口

    旧的命名方法:驱动创建一个符号链接,应用来访问。

    新的命名方法:128位GUID唯一标识, GUIDGEN生成

    2. WDM基本结构

    driverworks: kdriver, kpnpDevice, kpnpLowerDevice

    2.1  kdriver

        1)装载驱动时,pnp管理器为每个驱动程序调用一次driverentry例程

         2)初始化之后,pnp调用addDevice初始化设备;运行时有新设备被枚举将调用addDevice设备

               adddevice本职是把新设备附加到设备堆栈中

         3)driverworks中FDO和PDO连接

            

     2.2 kpnpdevice

       DO_EXCLUSIVE 指出设备是否排斥(io管理器仅允许打开一次)

       列举了一些函数

       HID, human interface device; 

       WMI,windows 管理诊断

     3. IRP操作

      driverworks对IRP进行了封装KIrp

      IRP重要域:

      1)MdlAddress(PMDL): 指向内存描述符表,当使用DO_DIRECT_IO,

            对于IRP_MJ_READ/WRITE, IO管理器就创建MDL,锁定用户内存。 

            对于IRP_MJ_DEVICE_CONTROL, METHOD_IN_DIRECT/ METHOD_OUT_DIRECT, 输出缓冲区创建MDL

      2)associatedIrp.systemBuffer, 系统的数据缓冲区,DO_BUFFERED_IO会用

         

      3)IoStatus, status收到NTSTATUS, information用于保存数据传输操作

      创建IRP时,同时创建关联的IO_STACK_LOCATION堆栈数组,每个堆栈单元对应一个要处理该IRP的驱动,存储IRP类型和参数等

      MajorFunction: 如IRP_MJ_READ

      minorFunction: 如IRP_MJ_PNP 的IRP_MN_START_DEVICE, IRP_MN_REMOVE_DEVICE

      parameters: create, read, startdevice

      deviceObject

      completionRoutine

    3.2 kirp

      函数: complete(), 完成IRP,绝不允许拥有自旋锁的情况下调用此函数,运行在IRQL<=DISPATCH_LEVEL

      status(), 即iostatus.status域, 如STATUS_PENDING

      information(), 若status不是STATUS_SUCCESS, 则这里设置为0

      IoctlBuffer(), bufferedReadDest, bufferedWriteSource() 对应associatedIrp.systembuffer

      MarkPending()

      IoctlCode(), readSize(), 

      WDM使用的成员函数

      allocatedResources, 系统分配的资源

      translatedResources, 系统分配的翻译资源

    3.3 IRP基本操作

     完成IRP    I.pnpComplete()

     取消IRP

     等

  • 相关阅读:
    半夜的时候,干了个活,反了个小软件
    bzoj2243[SDOI2011]染色
    bzoj4034[HAOI2015]T2
    bzoj2661[BeiJing wc2012]连连看
    bzoj1406[AHOI2007]密码箱
    bzoj1452[JSOI2009]Count
    bzoj1934[Shoi2007]Vote 善意的投票
    bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会
    bzoj1293[SCOI2009]生日礼物
    bzoj1221[HNOI2001] 软件开发
  • 原文地址:https://www.cnblogs.com/yuanming/p/7047859.html
Copyright © 2011-2022 走看看