77.windbg-!drvobj、.devstack(驱动对象,设备栈,AttachedDevice)
来源:互联网 发布:javascript例子 编辑:程序博客网 时间:2024/06/13 11:18
引言
驱动的设备栈可以参看:http://blog.csdn.net/hgy413/article/details/17737517,如下:
驱动设备的创建顺序是,先创建底层PDO,再创建高层的FDO,PDO和FDO之间可能夹杂着各种过滤驱动,每次的设备对象由不同驱动程序所创建,有的驱动程序是系统自带的,有的需要程序员来编写,底层设备对象寻找上层的设备对象,是依靠底层设备对象的AttachedDevice寻找的,如果某一设备的AttachedDevice为空,说明已经到了设备堆栈的顶部,而高层设备找低一层的设备对象,只能能过设备扩展来记录,如下图:
PDO:物理设备对象,由总线(BUS)创建
FDO:功能驱动对象,实现PDO的某些功能
FIDO:可插入由PDO-FDO组在的设备栈中,参与IRP处理
CDO:控制设备对象,不对应真实/逻辑的物理设备,我们大部分是写这种,一般来讲,一个驱动程序只会创建唯一的功能设备对象, 功能设备对象一般不用来处理具体的物理设备功能,仅仅作为 驱动程序的编程接口,与其他模块交互
设备栈
1.系统中的I/O请求虽然发送给指定的设备对象,但请求却是通过 设备栈来传递的
2.最上层的设备对象首先获得机会处理请求,然后传递给下层设 备对象。如果上层设备对象处理完请求,则可以拒绝将命令继 续下传,下层设备对象就失去了处理的机会
3.功能设备对象会完成大多数的工作,只把部分I/O请求传递给物 理设备对象。 I/O请求在设备栈中传递完毕后,还会有一次从栈底开始的逆向 回调过程,进行完成后操作
4.过滤设备对象可以把自己插入到设备栈中任意位置,过滤顺向 的IO请求包,或者逆序的回调过程。多个过滤设备对象可以叠 加
!drvobj
!drvobj 扩展命令显示DRIVER_OBJECT 的详细信息。
- Bit 0 (0x1)
- 显示驱动拥有的设备对象。
- Bit 1 (0x2)
- 显示驱动的dispatch例程的入口点。
- Bit 2 (0x4)
- 显示驱动的设备对象的详细信息(需要设置bit 0)
以打印机驱动为例:
0: kd> !drvobj parportDriver object (89a48ce8) is for: \Driver\ParportDriver Extension List: (id , addr)Device Object list:895e3040 8969d030等同于
0: kd> !drvobj \Driver\ParportDriver object (89a48ce8) is for: \Driver\ParportDriver Extension List: (id , addr)Device Object list:895e3040 8969d030等同于
0: kd> !drvobj 89a48ce8Driver object (89a48ce8) is for: \Driver\ParportDriver Extension List: (id , addr)Device Object list:895e3040 8969d030
!devstack
!devstack 扩展显示设备对象关联的设备栈的格式化后的信息。
以上面为例:
0: kd> !devstack 895e3040 !DevObj !DrvObj !DevExt ObjectName> 895e3040 \Driver\Parport 895e30f8 Parallel0!DevNode 899ce970 : DeviceInst is "LPTENUM\MicrosoftRawPort\6&16ccfde1&0&LPT1"
0: kd> !devstack 8969d030 !DevObj !DrvObj !DevExt ObjectName> 8969d030 \Driver\Parport 8969d0e8 ParallelPort0 89a56bb8 \Driver\ACPI 89bfeb30 00000071!DevNode 89a56728 : DeviceInst is "ACPI\PNP0400\5&324d5432&0" ServiceName is "Parport"从上面可以看到设备栈,它的底层设备栈是89a56bb8,对应的驱动是ACPI,
我们来看看ACPI一共创建了多少个设备:
0: kd> !drvobj \Driver\ACPIDriver object (89c5c8b0) is for: \Driver\ACPIDriver Extension List: (id , addr)Device Object list:89ba9870 89ba9988 89ba9aa0 89ba9bb889ad59a0 89ad5ab8 89ad5bd0 89ad5ce889ad5e00 89ad5f18 89ad5030 8971c2b08971c3c8 8971c4e0 8971cce8 8971ce008971cf18 89a87208 89ae4770 89ae488889ae49a0 89ae4ab8 89ae4bd0 89ae4ce889ae4e00 89ae4f18 89a63540 89a6365889a63770 89a63888 89a639a0 89a63ab889a63bd0 89a63ce8 89a63e00 89a63f1889c14658 89c14770 89c14888 89c149a089c14ab8 89c14bd0 89c14ce8 89c14e0089c14f18 89bab4c8 89c46db0 89c10f1889baa6b8 89bf91f8 89c471f8 89aa74e889b94378 897068a8 8972d218 89bcb1a889be01a8 89bf51a8 89c11e70 89c1192089c5c520有点多啊,它们分布在不同的设备栈中,随便取个看看,比如第三个:
0: kd> !devstack 89ba9aa0 !DevObj !DrvObj !DevExt ObjectName 8970f030 \Driver\serenum 8970f0e8 89b84638 \Driver\Serial 89b846f0 Serial0> 89ba9aa0 \Driver\ACPI 89c474a0 00000074!DevNode 89ba9608 : DeviceInst is "ACPI\PNP0501\1" ServiceName is "Serial"
来看看AttachedDevice,当一个FDO附加在一个PDO上时,PDO的AttachedDevice会记录FDO的位置,PDO会被称为底层驱动或下层驱动,而FDO会被称为高层驱动或上层驱动,越上层越接近发出IO请求的地方,如上面,
0: kd> dt 89ba9aa0 _DEVICE_OBJECT -y AttachedDevicent!_DEVICE_OBJECT +0x010 AttachedDevice : 0x89b84638 _DEVICE_OBJECT0: kd> dt 89b84638 _DEVICE_OBJECT -y AttachedDevicent!_DEVICE_OBJECT +0x010 AttachedDevice : 0x8970f030 _DEVICE_OBJECT0: kd> dt 8970f030 _DEVICE_OBJECT -y AttachedDevicent!_DEVICE_OBJECT +0x010 AttachedDevice : (null)可以看到_DEVICE_OBJECT的AttachedDevice可以从下向上遍历设备栈,而设备栈中每一层设备都分属于不同驱动,而_DEVICE_OBJECT的NextDevice可以遍历当前驱动创建的所有设备,这是两个不同的概念
阅读全文
0 0
- 77.windbg-!drvobj、.devstack(驱动对象,设备栈,AttachedDevice)
- windbg指令-!drvobj
- 驱动对象-设备对象-设备栈
- 学习windows驱动(设备对象设备栈)
- 驱动对象、设备对象、设备栈----驱动程序基础概念(一)
- 驱动对象 设备对象 设备栈 乱杂谈
- 驱动对象 设备对象 设备栈 乱杂谈
- 驱动对象 设备对象 设备栈 乱杂谈
- 驱动对象 设备对象 设备栈 乱杂谈
- [转载]驱动对象 设备对象 设备栈 乱杂谈
- [zz]驱动对象设备对象设备栈乱杂谈
- 驱动对象、设备对象、设备栈----驱动程序基础概念
- WDF驱动学习:驱动对象,设备对象(一)
- WDF驱动学习:驱动对象,设备对象(二)
- 驱动对象与设备对象
- 驱动对象和设备对象
- 驱动对象和设备对象
- 驱动对象与设备对象
- Java ArrayList、Vector和LinkedList等的差别与用法(转)
- 欢迎使用CSDN-markdown编辑器
- 【读书笔记】TCP/IP网络编程 非阻塞模式
- 伪元素、伪类的理解
- 图之图的深度优先遍历
- 77.windbg-!drvobj、.devstack(驱动对象,设备栈,AttachedDevice)
- 想让程序跳转到绝对地址0x100000处执行,该如何做?
- scala中的object和class
- 命令与文件的查询
- 图片放大镜效果
- svn: 警告: W155007: “~/svn/runoob/”不是工作副本
- 厦门法院现离奇判决 政府征收了门诊部场所 “管理费”还要交?
- 父母终于可以放心啦 安全上学 智慧校园电子班牌系统方案
- GCD and LCM HDU