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

框架处理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管理器。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值