学习windows驱动(框架和IO请求)

来源:互联网 发布:如何进入it行业 知乎 编辑:程序博客网 时间:2024/06/14 09:37

框架处理IO请求的过程是怎样子的?
框架和IO请求

  1. 应用程序调用Kernel32的接口函数ReadFile读。
  2. ReadFile调用Ntdll.dll里的NtReadFile函数,进入内核调用内核服务NtReadFile,IO管理器接管读操作处理。
  3. IO管理器为读请求构造IRP_MJ_READ类型的IRP。
  4. IO管理器找到由WDF框架创建的设备对象(DEVICE_OBJECT),将IRP发送到它的读分发函数(DispatchRead)。
  5. WDF框架收到IRP后,查看WDF驱动是不是注册了读回调,如果注册了就把IRP封装成一个IO请求对象(WDFREQUEST),把WDFREQUEST放入WDF驱动指定队列。
  6. 队列把IO请求对象发送给WDF驱动处理,WDF驱动注册的读回调被执行。

框架收到IO管理器给它的IRP请求后,将IRP封装在WDFREQUEST对象里,作为参数调用驱动注册事件回调函数。

WDFREQUEST是怎么创建的?
IO管理器把用户请求封装成IRP对象发送到指定设备栈。
首先得到的是WDF框架,框架对IRP做一定处理后,检查WDF驱动是不是注册了想要的事件回调,如果没有,框架就将IRP发送给设备栈的下层设备,IRP将得到处理,并最终返回IO管理器。

0 0
原创粉丝点击