windows 2000/xp WDM设备驱动程序开发

Posted 波罗蜜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows 2000/xp WDM设备驱动程序开发 相关的知识,希望对你有一定的参考价值。

 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

 等

 

以上是关于windows 2000/xp WDM设备驱动程序开发 的主要内容,如果未能解决你的问题,请参考以下文章

WD.驱动书_USB

WINDOWS硬件通知应用程序的常方法(五种方式:异步过程调用APC,事件方式VxD,消息方式,异步I/O方式,事件方式WDM)

Windows NT/2000/XP进程与线程之间的关系

驱动开发函数详解之Wdm

用VirtualBox安装XP一直蓝屏怎么办

Windows 2000/XP IIS5.1安装