I/O 请求



上图来自微软驱动 WDK DOC

1. the subsystem calls an I/O system service to open a named file.
2. I/O manager 调用 object manager 来查询文件, object manager 同时也会对 symbolic link 进行处理, 之后会调用安全模块来检查 subsystem 是否有正确的权限来打开文件对象。
3. 如果 volumne 还没有挂接, I/O manager 会暂时suspend 这个 open 操作。 然后调用文件系统,直到有一个文件系统能够识别出这个文件是存在某个设备上。 在文件系统挂接上 volume 之后, I/O manager resume 这个 open 请求。
4. I/O manager 分配IPR 内存且初始化它。 对driver 而言, open 操作等同于 crate 请求
5. I/O manager 调用文件系统driver, 把 irp 传递给他们, 文件系统driver 访问在IRP 中的 I/O stack location 来执行相关的代码, 检查参数,判断请求的文件是否已经cache 了, 如果没有设置下级 driver 的 io/stack location.
6. driver 不仅可以处理 irp , 也可以结束这个 irp 操作还可以调用 I/O manager 或者其他模块所支持的kernel mode 的函数。
7. driver 可以把 irp 返回给 I/O manager, 通过设置 I/O status block 中的参数来告诉 I/O manager 操作是否成功,以及为什么失败。
8. I/O manager 获得到 IRP 的返回值,把操作结果通过受保护的subsystem 返回给调用者。
9. I/O manger 释放分配的 IRP 内存
10. 如果操作成功, I/O manager 返回文件对象的句柄给 subsystem,如果操作不成功,返回正确的错误码。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值