存储驱动程序中可分页代码的限制
来源:互联网 发布:python 逻辑回归 编辑:程序博客网 时间:2024/05/22 20:34
为防止死锁,用于读写请求的驱动存储驱动程序不应包含可分页代码,也不应试图去访问可分页内存。这是因为驱动程序的读分发例程DispatchRead和写分发例程DispatchWrite能在IRQL > PASSIVE_LEVEL调用,而缺页page I/O发生在IRQL = APC_LEVEL。
类似的规则应用于存储驱动的设备控制分发例程DispatchDeviceControl和一些限制条件。存储驱动程序的设备控制分发例程不应包含任何可分页代码和访问可分页内存。分发例程必须可以接受IOCTL请求——在任意IRQL为其它驱动程序并向下传递请求到驱动栈。驱动程序必须在不能改变IRQL的情况下,传递所有未能处理的IOCTL请求或请求的内容。
然而,Microsoft要求所有的存储IOCTL请求必须在PASSIVE_LEVEL提交。尽管分发例程本身不是可分页的,它能调用可分页子例程来处理存储IOCTL请求。这些子例程能访问可分页内存。
例程,如DriverEntry, Reinitialize, 和Unload,不做任何I/O处理,运行在IRQL = PASSIVE_LEVEL,可以使用可分页代码。
在分页路径中管理存储设备的驱动程序需要特殊考虑。分页文件中参与I/O操作的驱动程序时“分页路径”。当驱动程序在分页路径中,其处理IRP_MJ_POWER的 DispatchPower例程不可以为可分页的。
缺省情况下,驱动程序内核模式代码为不可分页的,也不可为可分页的内核模式驱动程序使用的全局内存。关于如何使用可分页代码,请参考编写驱动代码或可分页数据。
- 存储驱动程序中可分页代码的限制
- 最大限制地提高代码的可重用性
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- 可按任意字段排序的分页存储过程
- 可查询表中总条数和总页数的分页存储过程
- 可按任意字段排序的分页存储过程
- 分页存储过程,可将查询条件作为参数传递的分页查询存储过程
- 存储过程分页的主要代码
- 高效的存储过程分页代码
- 简单的repeater分页代码 (存储过程)
- 分页存储过程的编写代码
- 存储过程分页代码
- 存储过程分页代码
- 分页代码(存储过程)
- 存储过程分页代码
- 存储过程分页代码
- 分页存储过程代码
- 如何为Ubuntu添加中文支持
- C#四种排序算法[转]
- Introduce yourself
- System Header Files for Storage Drivers
- Thinking in Java 4th edition 中文非扫描版
- 存储驱动程序中可分页代码的限制
- 写缓存属性查询
- 走进并行时代之编程篇(二)
- 存储设备的设备惟一标示符(DUID)
- 2010-6-8 第六天
- Using 简写的另一宗用途
- NetBeans 时事通讯(刊号 # 105 - Jun 10, 2010)
- JSTL fmt:formatNumber 数字、货币格式化
- 为理想奋斗