使用IO_REMOVE_LOCK删除锁(一)
来源:互联网 发布:深圳乐易网络年终奖 编辑:程序博客网 时间:2024/06/06 06:10
删除锁例程提供了追踪一个设备上未解决的IO操作的数目,决定安全卸载驱动设备对象时机的方法。
驱动可以以以下两个目的使用删除锁:
1.保持删除锁,令驱动的DispatchPNP例程不能完成IRP_MN_REMOVE_DEVICE。
2.获取驱动不能删除设备对象的原因数量,并在此数量变为0时,设置事件
使用方法:
1. 在设备对象的Device_Extension中分配IO_REMOVE_LOCK结构成员,并调用IoInitializeRemoveLock.
一般在AddDevice例程中初始化Device_Extension调用IoInitializeRemoveLock.
2.在每次开始I/O操作前调用 IoAcquireRemoveLock,结束I/O操作后调用IoReleaseRemoveLock,驱动
可以多次获取IO_REMOVE_LOCK,调用IoAcquireRemoveLock增加使用计数,调用IoReleaseRemoveLock减少使用计数。
3.当处理一个设备删除请求 (IRP_MN_REMOVE_DEVICE) 时,驱动程序调用 IoReleaseRemoveLockAndWait
来释放在其 DispatchPnP 例程中获取的删除锁。这个调用直到与删除锁关联的引用计数达到零时才返回,
表示删除锁的所有其他持有者都已经被释放。为了完成排队的I/O操作,应在向下层设备递IRP_MN_REMOV E_DEVICE前调用IoReleaseRemoveLockAndWait。
4.由于IO_REMOVE_LOCK在Device_Extension,在处理IRP_MN_REMOVE_DEVICE时删除Device_Extension 的同
时,就删除了IO_REMOVE_LOCK。
相关函数:IoInitializeRemoveLock
IoAcquireRemoveLock
IoReleaseRemoveLock
IoReleaseRemoveLockAndWait
- 使用IO_REMOVE_LOCK删除锁(一)
- IO_REMOVE_LOCK(删除锁)
- 使用IO_REMOVE_LOCK删除锁(二)——IoInitializeRemoveLock
- IO_REMOVE_LOCK使用方法
- IO_REMOVE_LOCK使用方法小结
- IO_REMOVE_LOCK使用方法小结
- IO_REMOVE_LOCK使用方法小结
- TableView的使用(一)滑动删除,选择删除,多行删除
- Android Studio 使用技巧一(删除Module)
- 迭代器(一)删除
- 文件删除器(一)
- c++删除指针(一)
- DataGrid的使用:(一)、在DataGrid控件中实现基本的操作(编辑、删除、分页)
- DataGrid的使用:(一)在DataGrid控件中实现基本的操作(编辑、删除、分页)
- [每天一题]删除字符串中的重复字符(不要使用额外空间)
- HBase java API 使用实例(一)——增加、修改、删除
- HBase java API 使用实例(一)——增加、修改、删除
- 自删除技术浅析(一)
- linux下软件源码安装
- 数据库(2)——存储过程
- 驱动程序的基本函数
- Java中抽象类和接口的区别
- [Android_机制]_Http和Socket连接区别.doc
- 使用IO_REMOVE_LOCK删除锁(一)
- UVa 10928 - My Dear Neighbours
- spring中的PropertyPlaceholderConfigurer作用,用法
- ACProtect 1.40 - 1.41 - RISCO Software Inc. 脱壳
- iBatis SqlMap的配置总结
- 考勤系统用例图 及 用例文档
- ios6.0以前版本开发 异常信息:reason: ‘Could not instantiate class named NSLayoutConstraint’
- jsp的九大隐式对象及其作用域
- dedecms 搜索结果页中文章标题长度显示不全的解决办法