如题,这是前几天某同事问我的问题。他假设设备栈中有Pdo,Fdo,以及附属于Fdo的设备上下过滤驱动以及类上下过滤驱动,在这种情况下,OS会以怎样的顺序加载这些设备?

我第一反应是当然先加载Fdo,然后再加载过滤驱动。不过,出于谨慎,我决定还是先调试一下,然后再找资料核对一下。至于调试的对象,肯定还是万能的toast了~先准备好驱动文件夹,看名字就知道里面包含了类上下过滤驱动,设备上下过滤驱动以及功能驱动:

之后为这些驱动的加载下延迟断点:

kd> bu devlower!DriverEntry
kd> bu devupper!DriverEntry
kd> bu toaster!DriverEntry
kd> .sympath+ C:\Users\Eugene\Desktop\studio\to
Symbol search path is: srv*;C:\Users\Eugene\Desktop\studio\to
Symbol search path is: SRV*D:\symbols\win10Rs2x86*http://msdl.microsoft.com/download/symbols;c:\users\eugene\desktop\studio\to

现在可以用toaster中enum.exe枚举设备了,期间windbg会中断几次,只要根据遇到断点时给出的模块的名字以及断点触发的先后就可以知道驱动的加载顺序:

kd> g
Breakpoint 3 hit
devlower!DriverEntry:
abcb5010 8bff            mov     edi,edi
kd> ?? DriverObject
struct _DRIVER_OBJECT * 0xbf52c030
kd> g
Breakpoint 5 hit
toaster!DriverEntry:
abccb010 8bff            mov     edi,edi
kd> ?? DriverObject
struct _DRIVER_OBJECT * 0xb9682cd8
kd> g
Breakpoint 4 hit
devupper!DriverEntry:
abcd7010 8bff            mov     edi,edi
kd> g

最后看看这些模块在设备栈中的位置:

kd> !drvobj 0xb9682cd8 ;0xb9682cd8是前面加载toast时,显示的DriverObject的地址
Driver object (b9682cd8) is for:\Driver\toaster
Driver Extension List: (id , addr)Device Object list:
d346f550
kd> !devstack d346f550!DevObj   !DrvObj            !DevExt   ObjectNamebf5efea0  \Driver\devupper   bf5eff58
> d346f550  \Driver\toaster    d346f608  c1685a68  \Driver\devlower   c1685b20  b53681a0  \Driver\dynambus   b53df1a0  00000092
!DevNode b53df258 :DeviceInst is "{B85B7C50-6A01-11d2-B841-00C04FAD5171}\MsToaster\1&79f5d87&0&02"ServiceName is "toaster"

相信看了上面结果大家都知道设备加载的顺序了吧?os先加载设备栈底部的驱动,由下而上完成所有驱动的加载。

设备栈中各个设备加载顺序相关推荐

  1. 两个相同VID PID的不同设备加载同一个KO文件中的不同驱动

    两个相同VID PID的不同设备加载同一个KO文件中的不同驱动 问题:Realtek两个不同芯片的USB-TO-ETHERNET,PID VID都同为:8152.因为客户手中已经有一部分老的产品了,目 ...

  2. MTK6592平台 touchpanel驱动设备加载(一)

    前言: 从事android驱动调试工作已有一年多了,之前一直没有系统的看一下内核,正好这几个月有时间,整理了一下关于内核中对设备.驱动的调用关系,目前我是在mtk6592 kk 平台以touchpan ...

  3. 如何正确控制springboot中bean的加载顺序总结

    1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...

  4. Java 类中各成分加载顺序和内存中的存放位置

    一.什么时候会加载类? 使用到类中的内容时加载:有三种情况 1.创建对象:new StaticCode(); 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show ...

  5. VirtualBox 下USB 设备加载的步骤及无法加载的解决办法

    1. 将u盘插入电脑,在windows能够识别后,进入VirtualBox的选定要加载的虚拟机,选择设置-->选择usb设备项 2. 选择右边的第一或者是第二个图标,增加一个新的筛选器,第一个图 ...

  6. 服务器启动时Webapp的web.xml中配置的加载顺序

    一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...

  7. Java类中方法的加载顺序

    1 父类 public class Father {static {System.out.println("父类静态初始化块1");}public static int fsm = ...

  8. MTK6592平台 touchpanel驱动设备加载(二)

    关于设备驱动加载,我这边整理出的函数调用关系流程图见下,主要为了解释进程如何调用驱动里面的probe函数

  9. 如何控制HTML中DIV的加载顺序

    转载 http://bbl456.blog.sohu.com/72162079.html 目前网站之间相互调用的情况越来越多,比如 需要调用某个第三方提供的一些接口(天气预报),或者是第三方提供的广告 ...

最新文章

  1. Spring全局异常处理的三种方式
  2. python列表使用技巧与方法_Python列表的相关操作与方法
  3. java自学之路-day17
  4. windows无法启动mysql服务(位于本地计算机上)_Windows 10开始菜单无反应,怎么办,看是否启用User Manager服务...
  5. MATLAB信号处理之连续时间系统的时域分析
  6. Snake算法知识点记录
  7. 基于51单片机GPS定位系统GSM短信上报设计方案原理图
  8. 指纹匹配算法matlab,指纹识别算法matlab程序
  9. MatConvNet安装问题
  10. 怎么将计算机的网络恢复连接,win7怎么还原网络设置 win7本地连接不上的解决方法...
  11. html化妆品商城设计,基于HTML5的彩妆购物网站设计任务书
  12. 设计模式七大原则——里氏替换原则
  13. 京东平台开发者入驻指南
  14. mfc键盘控制移动鼠标光标_如何在Windows中使用键盘控制鼠标光标
  15. delphi xe “[FIREDAC][PHYS][SQLITE] DATABASE IS LOCKED”错误
  16. 做网赚想要赚到钱,心态很重要
  17. Java GUI项目,一个练手的泡泡龙小游戏
  18. Kubernetes 管理员认证(CKA)考试笔记(一)
  19. 如何进入PE系统(请点击)
  20. NSNumber 与 Tagged Pointer

热门文章

  1. [转载]如何【系统性学习】——从“媒介形态”聊到“DIKW 模型”
  2. 解决:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
  3. css3中的column属性实现多列布局和瀑布流布局
  4. MySQL删除外键、增加外键及删除主键、增加主键
  5. 【MATLAB】神经网络学习
  6. c语言读取词法并显示坐标,完整版)词法分析器(c语言实现
  7. HTML---iframe框架及优缺点
  8. ubuntu server 18.04 first config
  9. iOS 的 APP 在系统中如何适配不同的屏幕的尺寸
  10. 2021年中国原油加工行业供需回顾及发展趋势分析[图]