标签:函数 描述 成员函数 let res read ogr soc 自旋锁
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设备驱动程序开发 (1)
标签:函数 描述 成员函数 let res read ogr soc 自旋锁
原文地址:http://www.cnblogs.com/yuanming/p/7047859.html