文件名称:windows2000驱动程序开发大全
文件大小:1.46MB
文件格式:CHM
更新时间:2012-03-28 15:30:56
windows2000驱动程序开发大全
第一卷 驱动程序编写者指南.............................................................................................................................................. 1 第1章 驱动程序开发环境.............................................................................................................................................. 2 1.1 *构建和检查构建................................................................................................................................................ 2 1.2 调试环境.................................................................................................................................................................... 3 第2章 检查驱动程序...................................................................................................................................................... 4 2.1 Driver Verifier.............................................................................................................................................................. 4 2.1.1 Driver Verifier的能力......................................................................................................................................... 5 2.1.1.1 自动检查..................................................................................................................................................... 5 2.1.1.2 特别内存池(Special Memory Pool)...................................................................................................... 6 2.1.1.3 强迫IRQL检查(Forcing IRQL Checking)........................................................................................... 7 2.1.1.4 低资源模拟(Low Resources Simulation).............................................................................................. 8 2.1.1.5 内存池跟踪(Memory Pool Tracking)................................................................................................... 8 2.1.1.6 I/O检查....................................................................................................................................................... 8 2.1.2 Driver Verifier对图形驱动程序的能力............................................................................................................. 9 2.1.2.1 图形驱动程序的特别内存池................................................................................................................... 10 2.1.2.2 图形驱动程序的低资源模拟................................................................................................................... 11 2.1.3 激活和监视Driver Verifier.............................................................................................................................. 12 2.1.3.1 检查器(Verifier)命令行....................................................................................................................... 12 2.1.3.2 Driver Verifier管理器................................................................................................................................ 13 2.1.3.3 全局标记应用程序(Global Flags Utility)........................................................................................... 16 第二卷 即插即用、电源管理和设置设计指南........................................................................................................... 17 第一部分 即插即用和电源管理的要求........................................................................................................................... 18 第1章 即插即用和电源管理的介绍.......................................................................................................................... 19 1.1 什么是即插即用?.................................................................................................................................................. 19 1.1.1 PnP组件............................................................................................................................................................ 20 1.1.2 PnP的支持级别................................................................................................................................................ 20 1.2 什么是电源管理?.................................................................................................................................................. 21 1.2.1 电源管理的最初含义...................................................................................................................................... 22 1.2.2 电源管理的支持级别...................................................................................................................................... 22 1.2.3 全系统范围的电源管理的总览...................................................................................................................... 22 1.2.4 电源状态.......................................................................................................................................................... 23 1.3 驱动程序层次和设备对象...................................................................................................................................... 24 1.3.1 驱动程序种类.................................................................................................................................................. 24 1.3.1.1 总线驱动程序........................................................................................................................................... 25 1.3.1.2 功能驱动程序........................................................................................................................................... 25 1.3.1.3 过滤器驱动程序....................................................................................................................................... 25 1.3.2 驱动程序层次---一个例子.............................................................................................................................. 26 1.3.3 设备对象种类.................................................................................................................................................. 27 1.3.4 设备对象---一个例子...................................................................................................................................... 28 第2章 PnP和电源管理必须的驱动程序支持......................................................................................................... 31 2.1 必须的PnP支持的总览......................................................................................................................................... 31 2.2 PnP和电源管理DriverEntry例程.......................................................................................................................... 31 2.3 PnP和电源管理AddDevice例程........................................................................................................................... 33 2.3.1 编写AddDevice例程的指南.......................................................................................................................... 34 2.4 DispatchPnP例程..................................................................................................................................................... 35 2.5 DispatchPower例程................................................................................................................................................. 36 2.6 PnP和电源管理Unload例程.................................................................................................................................. 36 第二部分 即插即用.............................................................................................................................................................. 38 第1章 理解PnP............................................................................................................................................................. 39 1.1 PnP驱动程序设计指南........................................................................................................................................... 39 1.2 PnP和设备树........................................................................................................................................................... 40 1.3 PnP设备状态........................................................................................................................................................... 41 1.4 动态地添加一个新的PnP设备............................................................................................................................. 41 1.5 硬件资源.................................................................................................................................................................. 46 1.5.1 逻辑配置.......................................................................................................................................................... 47 1.5.1.1 支持资源需求列表的逻辑配置类型....................................................................................................... 47 1.5.1.2 资源列表的逻辑配置类型....................................................................................................................... 47 1.6 在驱动程序里使用GUID....................................................................................................................................... 48 1.6.1 定义和导出新的GUID................................................................................................................................... 48 1.6.2 在驱动程序代码里包含GUID....................................................................................................................... 49 第2章 处理即插即用IRP的规则.............................................................................................................................. 51 2.1 PnP IRP需求............................................................................................................................................................ 51 2.2 沿设备堆栈传递PnP IRP....................................................................................................................................... 52 2.3 延迟PnP IRP的处理直到低层的驱动程序完成.................................................................................................. 53 第3章 启动、停止和删除设备................................................................................................................................... 56 3.1 启动一设备.............................................................................................................................................................. 56 3.1.1 启动功能驱动程序里的一个设备.................................................................................................................. 56 3.1.2 启动过滤器驱动程序里的一个设备.............................................................................................................. 58 3.1.3 启动总线驱动程序里的一个设备.................................................................................................................. 58 3.1.4 启动设备设计注意.......................................................................................................................................... 59 3.2 为了资源重新平衡而停止一个设备...................................................................................................................... 59 3.2.1 理解何时停止发布IRP................................................................................................................................... 59 3.2.2 处理IRP_MN_QUERY_STOP_DEVICE请求............................................................................................. 60 3.2.3 处理IRP_MN_STOP_DEVICE请求............................................................................................................. 62 3.2.4 处理IRP_MN_CANCEL_STOP_DEVICE请求........................................................................................... 62 3.2.5 当一个设备被暂停时,保留进入的IRP....................................................................................................... 63 3.3 删除一个设备.......................................................................................................................................................... 64 3.3.1 理解何时发布删除IRP................................................................................................................................... 64 3.3.2 处理一个IRP_MN_QUERY_REMOVE_DEVICE请求.............................................................................. 66 3.3.3 处理一个IRP_MN_REMOVE_DEVICE请求.............................................................................................. 68 3.3.3.1 删除功能驱动程序里的一个设备........................................................................................................... 68 3.3.3.2 删除过滤器驱动程序里的一个设备....................................................................................................... 69 3.3.3.3 删除总线驱动程序里的一个设备........................................................................................................... 69 3.3.4 处理一个IRP_MN_CANCEL_REMOVE_DEVICE请求............................................................................ 71 3.3.5 处理一个IRP_MN_SURPRISE_REMOVAL请求....................................................................................... 72 第4章 使用PnP通知................................................................................................................................................... 75 4.1 PnP通知总览........................................................................................................................................................... 75 4.2 编写PnP通知回调例程的指南............................................................................................................................. 76 4.3 使用PnP设备接口改变通知................................................................................................................................. 77 4.3.1 为设备接口改变通知注册.............................................................................................................................. 77 4.3.2 处理设备接口改变事件.................................................................................................................................. 78 4.4 使用PnP目标设备改变通知................................................................................................................................. 78 4.4.1 注册目标设备改变通知.................................................................................................................................. 78 4.4.2 处理一个GUID_TARGET_DEVICE_QUERY_REMOVE事件................................................................. 79 4.4.3 处理一个GUID_TARGET_DEVICE_REMOVE_COMPLETE事件......................................................... 80 4.4.4 处理一个GUID_TARGET_DEVICE_REMOVE_CANCELLED事件....................................................... 80 4.5 使用PnP硬件profile改变通知............................................................................................................................. 80 4.5.1 注册硬件profile改变通知.............................................................................................................................. 81 4.5.2 处理硬件profile改变事件.............................................................................................................................. 81 4.6 使用PnP定制通知................................................................................................................................................. 81 第5章 支持多功能设备................................................................................................................................................ 83 5.1 支持多功能PC Card设备...................................................................................................................................... 83 5.1.1 支持遵照多功能标准的PC Card.................................................................................................................... 84 5.1.2 支持有不完全配置寄存器地址的PC Card.................................................................................................... 84 5.1.3 支持有不完全配置寄存器的PC Card............................................................................................................ 87 5.2 支持多功能PCI设备.............................................................................................................................................. 90 5.3 支持其他总线上的多功能设备.............................................................................................................................. 90 5.4 使用系统提供的mf.sys.......................................................................................................................................... 91 5.5 为一个多功能设备生成资源图.............................................................................................................................. 92 第三部分 电源管理.............................................................................................................................................................. 94 第1章 在驱动程序内支持电源管理.......................................................................................................................... 95 1.1 内核模式下的电源管理组件.................................................................................................................................. 95 1.1.1 ACPI BIOS........................................................................................................................................................ 95 1.1.2 ACPI 驱动程序................................................................................................................................................ 96 1.1.3 电源管理器...................................................................................................................................................... 96 1.1.4 电源管理中驱动程序的作用.......................................................................................................................... 97 1.2 驱动程序的电源管理职能...................................................................................................................................... 97 1.2.1 报告设备的电源性能...................................................................................................................................... 97 1.2.1.1 DeviceD1和DeviceD2.............................................................................................................................. 98 1.2.1.2 WakeFromD0,WakeFromD1,WakeFromD2,和WakeFromD3......................................................... 98 1.2.1.3 DeviceState................................................................................................................................................. 98 1.2.1.4 SystemWake............................................................................................................................................... 99 1.2.1.5 DeviceWake.............................................................................................................................................. 100 1.2.1.6 D1Latency,D2Latency,和D3Latency............................................................................................... 100 1.2.2 对电源管理设置设备对象标记.................................................................................................................... 100 1.2.3 处理电源IRP................................................................................................................................................. 101 1.2.3.1 系统电源IRP......................................................................................................................................... 101 1.2.3.2 独立设备的电源IRP............................................................................................................................. 102 1.2.4 设备的上电.................................................................................................................................................... 103 1.2.5 设备的掉电.................................................................................................................................................... 103 1.2.6 激活设备唤醒能力........................................................................................................................................ 104 1.3 处理电源IRP的规则............................................................................................................................................ 104 1.3.1 使用PoCallDriver.......................................................................................................................................... 104 1.3.2 传递电源IRP................................................................................................................................................. 105 1.3.3 设备休眠时排队I/O请求............................................................................................................................. 106 1.3.4 处理未被支持的或者无法识别的电源IRP................................................................................................. 106 第2章 独立设备的电源管理..................................................................................................................................... 107 2.1 设备电源状态........................................................................................................................................................ 107 2.1.1 设备工作状态DO......................................................................................................................................... 108 2.1.2 设备休眠状态D1,D2,和D3................................................................................................................... 108 2.1.3 设备电源状态所需的支持............................................................................................................................ 110 2.2 管理设备电源策略................................................................................................................................................ 110 2.3 为设备电源状态处理IRP_MN_SET_POWER................................................................................................... 111 2.3.1 处理设备掉电IRP......................................................................................................................................... 112 2.3.2 处理设备上电IRP......................................................................................................................................... 114 2.3.3 设备电源IRPIoCompletion例程.................................................................................................................. 114 2.4 为设备电源状态处理IRP_MN_QUERY_POWER............................................................................................ 115 2.5 为设备电源状态发送IRP_MN_QUERY_POWER或者发送IRP_MN_SET_POWER.................................. 116 2.6 检测空闲的设备.................................................................................................................................................... 118 2.6.1 用于空闲检测的电源管理器程序................................................................................................................ 118 2.6.2 执行设备特定的空闲检测............................................................................................................................ 119 第3章 处理系统电源状态请求................................................................................................................................ 120 3.1 系统电源状态........................................................................................................................................................ 120 3.1.1 系统工作状态S0........................................................................................................................................... 121 3.1.2 系统休眠状态S1,S2,S3,S4................................................................................................................... 121 3.1.3 系统关机状态S5........................................................................................................................................... 123 3.1.4 系统电源动作................................................................................................................................................ 123 3.2 系统电源策略........................................................................................................................................................ 124 3.3 防止系统电源状态变化........................................................................................................................................ 125 3.4 为系统电源状态处理IRP_MN_QUERY_P0WER............................................................................................. 125 3.4.1 使系统查询电源IRP失效............................................................................................................................ 126 3.4.2 在设备电源策略所有者中处理系统查询电源IRP..................................................................................... 126 3.4.3 在总线驱动程序中处理系统查询电源IRP................................................................................................. 127 3.4.4 在过滤驱动程序中处理系统查询电源IRP................................................................................................. 127 3.5 为系统电源状态处理IRP_MN_SET_POWER................................................................................................... 128 3.5.1 在设备电源策略所有者中处理系统设置电源IRP..................................................................................... 128 3.5.1.1 确定当前的设备电源状态..................................................................................................................... 129 3.5.1.2 发送一个响应系统设置电源IRP的设备设置电源IRP..................................................................... 129 3.5.2 在总线驱动程序中处理系统设置电源IRP................................................................................................. 130 3.5.3 在过滤驱动程序中处理系统设置电源IRP................................................................................................. 130 第4章 支持具有唤醒能力的设备............................................................................................................................ 132 4.1 等待/唤醒操作综述............................................................................................................................................... 132 4.1.1 确定设备是否能唤醒系统............................................................................................................................ 133 4.1.2 理解通过设备树的等待/唤醒IRP的路径................................................................................................... 134 4.1.3 完成等待/唤醒IRP综述............................................................................................................................... 136 4.2 处理等待/唤醒IRP的步骤................................................................................................................................... 137 4.2.1 在功能驱动程序或者过滤驱动程序 (FDO)中处理等待/唤醒IRP........................................................... 137 4.2.2 在总线驱动程序(PDO)中处理等待/唤醒IRP............................................................................................. 138 4.2.3 等待/唤醒IRPIoCompletion例程................................................................................................................. 139 4.3 发送等待/唤醒IRP................................................................................................................................................ 139 4.3.1 确定何时发送等待/唤醒IRP........................................................................................................................ 140 4.3.2 等待/唤醒IRP请求....................................................................................................................................... 140 4.3.3 等待/唤醒的回调例程................................................................................................................................... 140 4.3.4 撤消等待/唤醒IRP........................................................................................................................................ 141 4.4 等待/唤醒IRP的Cancel例程.............................................................................................................................. 142 第四部分 设置.................................................................................................................................................................... 143 第1章 设备安装总览.................................................................................................................................................. 145 1.1 设备安装组件........................................................................................................................................................ 145 1.2 PnP设备安装示例................................................................................................................................................. 147 1.3 Setup如何为设备选择驱动程序?......................................................................................................................... 148 1.4 系统设置阶段........................................................................................................................................................ 151 第2章 为设备提供驱动程序..................................................................................................................................... 152 2.1 驱动程序文件........................................................................................................................................................ 152 2.2 注册表中的驱动程序信息.................................................................................................................................... 153 2.3 指定驱动程序装载顺序........................................................................................................................................ 154 2.4 安装过滤器驱动程序............................................................................................................................................ 156 2.5 为设备安装Null驱动程序................................................................................................................................... 158 第3章 建立INF文件................................................................................................................................................. 159 3.1 INF文件总体指南................................................................................................................................................. 159 3.2 为设备文件说明源和目标位置............................................................................................................................ 160 3.3 建立跨平台的和/或者双操作系统的INF文件.................................................................................................. 161 3.4 建立国际化的INF文件....................................................................................................................................... 162 3.5 在设备的INF文件中加强打开文件的安全性................................................................................................... 162 3.6 从应用程序访问INF 文件.................................................................................................................................. 163 3.6.1 打开和关闭INF文件.................................................................................................................................... 164 3.6.2 从INF文件提取信息.................................................................................................................................... 164 第4章 编写协同安装程序......................................................................................................................................... 165 4.1 协同安装程序总览................................................................................................................................................ 165 4.2 安装程序界面........................................................................................................................................................ 167 4.3 协同安装程序操作................................................................................................................................................ 168 4.3.1 处理DIF代码................................................................................................................................................ 168 4.4 注册协同安装程序................................................................................................................................................ 170 4.4.1 注册设备专用的协同安装程序.................................................................................................................... 170 4.4.2 注册类协同安装程序.................................................................................................................................... 171 第5章 编写类安装程序............................................................................................................................................. 174 5.1 类安装程序界面.................................................................................................................................................... 174 5.2 设备安装函数小结................................................................................................................................................ 175 5.3 注册类安装程序.................................................................................................................................................... 176 5.4 在类安装程序的INF文件中加强文件打开的安全性....................................................................................... 176 第6章 编写定制设备安装应用程序........................................................................................................................ 178 6.1 安装与驱动程序共用的软件实用程序................................................................................................................ 178 6.2 定制安装应用程序指导........................................................................................................................................ 178 第7章 提供设备属性页............................................................................................................................................. 181 7.1 设备属性页所需的支持........................................................................................................................................ 181 7.2 处理DIF_ADDPROPERTYPAGE_ADVANCED............................................................................................... 181 7.3 属性页回调函数.................................................................................................................................................... 183 7.4 处理属性页的Windows信息............................................................................................................................... 183 第8章 设备安装疑难解答......................................................................................................................................... 186 8.1 使用SetupAPI记录日志...................................................................................................................................... 187 8.1.1 设置SetupAPI记录日志级别...................................................................................................................... 187 8.1.2 解释SetupAPI日志文件示例...................................................................................................................... 189 8.2 显示Device Manager中的隐藏设备.................................................................................................................... 191 第9章 安装一个要求重新启动机器的设备........................................................................................................... 192 第三卷 内核模式驱动程序设计指南............................................................................................................. 1 第一部分 一般内核模式................................................................................................................................... 2 第1章 Windows 2000和WDM驱动程序................................................................................................ 3 1.1 Windows 2000组件一览........................................................................................................................ 3 1.2 Windows 2000中的驱动程序种类........................................................................................................ 4 1.3 Windows 2000和WDM驱动程序的设计目标................................................................................... 5 1.3.1 移植性............................................................................................................................................. 6 1.3.2 可配置性......................................................................................................................................... 6 1.3.3 永远抢占优先和永远中断............................................................................................................. 7 1.3.4 多处理器安全................................................................................................................................. 8 1.3.5 基于对象......................................................................................................................................... 9 1.3.6 带有可复用IRP的包驱动I/O.................................................................................................... 10 1.3.7 支持异步I/O................................................................................................................................ 11 第2章 分层的I/O、IRP和I/O对象...................................................................................................... 12 2.1 Windows 2000 I/O模型概述................................................................................................................ 12 2.2 终端用户I/O请求和Windows 2000文件对象................................................................................. 13 2.2.1 用户I/O请求的注意事项........................................................................................................... 14 2.3 IRP和驱动程序指定的I/O栈位置..................................................................................................... 14 2.3.1 IRP处理的注意事项.................................................................................................................... 18 2.4 驱动程序对象和标准驱动程序例程.................................................................................................. 19 2.4.1 对象的不透明性........................................................................................................................... 19 2.4.2 标准驱动程序对象入口点........................................................................................................... 20 2.4.3 其他标准驱动程序例程............................................................................................................... 21 2.4.4 标准驱动程序例程的注意事项................................................................................................... 22 2.5 设备配置和分层驱动程序.................................................................................................................. 23 2.5.1 样例设备和驱动程序配置........................................................................................................... 24 2.5.2 添加驱动程序的注意事项........................................................................................................... 24 2.6 设备对象和分层驱动程序.................................................................................................................. 24 2.6.1 针对样本配置的设备对象........................................................................................................... 25 2.6.2 设备对象的注意事项................................................................................................................... 26 第3章 系统定义的对象和对驱动程序的支持..................................................................................... 27 3.1 系统组成部分和分层内核模式驱动程序.......................................................................................... 28 3.1.1 操纵系统定义的对象的支持例程............................................................................................... 28 3.1.2 存储系统定义的对象................................................................................................................... 30 3.2 设备对象和设备扩展.......................................................................................................................... 31 3.2.1 定义设备扩展............................................................................................................................... 31 3.2.2 创建设备对象和设备扩展........................................................................................................... 32 3.2.3 初始化驱动程序特定的设备对象和设备扩展........................................................................... 33 3.2.4 设置用户缓冲区的访问............................................................................................................... 35 3.2.4.1 使用缓冲I/O......................................................................................................................... 35 3.2.4.2 使用直接I/O......................................................................................................................... 36 3.2.4.3 使用非直接也非缓冲的I/O................................................................................................. 38 3.3 适配器对象和DMA........................................................................................................................... 39 3.3.1 映射寄存器................................................................................................................................... 40 3.3.2 获取适配器对象........................................................................................................................... 41 3.3.3 拆分传输请求............................................................................................................................... 42 3.3.4 使用系统DMA............................................................................................................................ 43 3.3.4.1 基于包的系统DMA............................................................................................................ 43 3.3.4.1.1 为基于包的DMA分配适配器通道........................................................................... 44 3.3.4.1.2 为基于包的DMA设置系统DMA控制器............................................................... 45 3.3.4.2 公用缓冲区系统DMA........................................................................................................ 47 3.3.4.2.1 为公用缓冲区系统DMA分配适配器通道............................................................... 48 3.3.4.2.2 为公用缓冲区DMA设置系统DMA控制器........................................................... 49 3.3.5 使用总线控制器DMA................................................................................................................ 49 3.3.5.1 基于包的总线控制器DMA................................................................................................ 50 3.3.5.1.1 分配总线控制器适配器对象....................................................................................... 51 3.3.5.1.2 设置传输操作............................................................................................................... 52 3.3.5.2 公用缓冲区的总线控制器DMA........................................................................................ 54 3.3.6 执行发散/收集DMA................................................................................................................... 55 3.4 控制器对象.......................................................................................................................................... 56 3.4.1 创建带有控制器扩展的控制器对象........................................................................................... 57 3.4.2 I/O操作分配控制器对象............................................................................................................. 58 3.5 中断对象.............................................................................................................................................. 59 3.5.1 获得系统指定的中断向量、DIRQL和处理器掩码................................................................. 60 3.5.2 注册ISR........................................................................................................................................ 60 3.6 DPC对象.............................................................................................................................................. 61 3.6.1 注册和排队DpcForIsr例程........................................................................................................ 62 3.6.2 注册和排队CustomDpc例程..................................................................................................... 63 3.7 带有相关的DPC的定时器对象........................................................................................................ 64 3.7.1 注册和启用IoTimer例程............................................................................................................ 64 3.7.2 注册和排队CustomTimerDpc例程........................................................................................... 65 3.8 设备队列对象和互锁队列.................................................................................................................. 66 3.8.1 设置设备队列对象和排队IRP................................................................................................... 67 3.8.2 设置一个互锁队列和排队IRP................................................................................................... 68 3.9 内核调度者对象.................................................................................................................................. 69 3.9.1 定时器对象................................................................................................................................... 71 3.9.2 事件对象....................................................................................................................................... 72 3.9.3 信号量对象................................................................................................................................... 74 3.9.4 互斥体对象................................................................................................................................... 75 3.9.5 线程在调度者对象上等待的报警和APC的处理..................................................................... 78 3.10 回调对象............................................................................................................................................ 79 3.10.1 定义回调对象............................................................................................................................. 79 3.10.2 使用驱动程序定义的回调对象................................................................................................. 80 3.10.3 使用系统定义的回调对象......................................................................................................... 80 第4章 驱动程序基本结构........................................................................................................................ 82 4.1 标准驱动程序例程.............................................................................................................................. 82 4.2 最低层设备驱动程序的分段IRP处理.............................................................................................. 83 4.3 中间层驱动程序的分段IRP处理...................................................................................................... 86 4.4 设计和开发一个驱动程序.................................................................................................................. 88 4.4.1 设备对象命名和设备接口注册................................................................................................... 88 4.4.2 为驱动程序例程选择名字........................................................................................................... 88 4.4.3 开始设计....................................................................................................................................... 89 4.4.4 开始开发....................................................................................................................................... 91 第5章 DriverEntry 和 Reinitialize 例程............................................................................................. 93 5.1 DriverEntry例程需求........................................................................................................................... 93 5.1.1 DriverEntry例程语法与参数....................................................................................................... 93 5.1.2 DriverEnty返回值........................................................................................................................ 94 5.2 DriverEntry例程功能........................................................................................................................... 94 5.2.1 DriverEntry例程必备功能........................................................................................................... 95 5.2.2 DrierEntry可选功能..................................................................................................................... 95 5.3 Reinitialize例程需求与功能................................................................................................................ 96 第6章 Dispatch例程................................................................................................................................ 98 6.1 Dispatch例程需求................................................................................................................................ 98 6.1.1 Dispatch例程一般实现................................................................................................................ 99 6.1.2 Dispatch例程条件实现.............................................................................................................. 100 6.2 Dispatch例程基本功能...................................................................................................................... 101 6.2.1 何时检查I/O栈位置................................................................................................................. 101 6.2.2 如何在一个Dispatch例程中完成一个IRP............................................................................. 102 6.2.3 何时在Dispatch例程中完成一个IRP..................................................................................... 103 6.2.4 如何从一个Dispatch例程传送带有效参数的IRP................................................................. 104 6.2.5 为较低层驱动程序分配IRP..................................................................................................... 105 6.2.6 处理异步传输请求..................................................................................................................... 105 6.3 Dispatch例程设计.............................................................................................................................. 106 6.3.1 DispatchCreate和DispatchClose功能...................................................................................... 106 6.3.1.1 基本DispatchCreateClose例程......................................................................................... 107 6.3.1.2 实现DispatchCreateClose的注意事项............................................................................. 107 6.3.2 DispatchCleanup功能................................................................................................................. 108 6.3.3 DispatchRead或DispatchWrite功能........................................................................................ 109 6.3.3.1 使用缓冲I/O的DispatchReadWrite................................................................................. 110 6.3.3.2 使用直接I/O的DispatchReadWrite................................................................................. 111 6.3.3.3 较高层驱动程序的DispatchReadWrite............................................................................ 111 6.3.3.4 实现DispatchReadWrite的注意事项............................................................................... 112 6.3.4 Dispatch(Internal)DeviceControl功能........................................................................................ 113 6.3.4.1 最低层驱动程序中的DispatchDeviceControl.................................................................. 114 6.3.4.2 较高层驱动程序中的DispatchDeviceControl.................................................................. 114 6.3.4.3 类/端口驱动程序中的Dispatc(Internal)DeviceControl.................................................... 115 6.3.4.4 实现Dispatch(Internal)DeviceControl的注意事项.......................................................... 116 第7章 StartIo和队列管理例程............................................................................................................ 118 7.1 排队IRP............................................................................................................................................. 118 7.2 StarIo例程需求................................................................................................................................... 119 7.2.1 设备驱动程序中的StartIo例程................................................................................................ 120 7.2.2 StartIo例程功能.......................................................................................................................... 121 7.2.2.1 使用缓冲I/O的设备驱动程序StartIo例程..................................................................... 122 7.2.2.2 使用直接I/O的设备驱动程序StartIo例程..................................................................... 122 7.2.2.3 在StartIo中处理设备控制请求........................................................................................ 123 7.2.3 I/O操作设备编程....................................................................................................................... 123 7.2.4 较高层驱动程序中的StartIo例程............................................................................................ 124 7.2.5 实现StartIo的注意事项............................................................................................................ 124 7.3 使用互锁队列或设备队列的需求.................................................................................................... 125 7.3.1 驱动程序管理的队列的存储需求............................................................................................. 126 7.3.2 建立驱动程序管理的队列......................................................................................................... 126 7.3.3 驱动程序管理的队列中排队的IRP......................................................................................... 126 7.3.4 用驱动程序创建的线程管理互锁队列..................................................................................... 127 7.3.5 管理补充设备队列..................................................................................................................... 128 第8章 中断服务例程.............................................................................................................................. 131 8.1 ISR需求.............................................................................................................................................. 131 8.1.1 ISR性能....................................................................................................................................... 131 8.1.2 附加的需求的驱动程序例程..................................................................................................... 132 8.1.3 建立一个ISR.............................................................................................................................. 132 8.2 ISR基本功能...................................................................................................................................... 132 8.3 ISR重叠I/O操作功能....................................................................................................................... 133 第9章 DpcForIsr例程和CustomDpc例程........................................................................................ 135 9.1 DpcForIsr和CustomDpc例程需求.................................................................................................. 135 9.1.1 DpcForIsr例程与CustomDpc例程.......................................................................................... 135 9.1.2 DpcForIsr例程基本需求............................................................................................................ 136 9.1.3 CustomDpc例程基本需求......................................................................................................... 136 9.1.4 其他需要的驱动程序例程......................................................................................................... 137 9.1.5 建立DpcForIsr和CustomDpc例程........................................................................................ 137 9.2 DpcForIsr和CustomDpc功能.......................................................................................................... 138 9.2.1 使用缓冲I/O和满足设备控制IRP.......................................................................................... 139 9.2.2 直接I/O使用............................................................................................................................. 139 9.2.3 实现一个DpcForIsr或CustomDpc例程的注意事项............................................................ 140 第10章 SynchCritSection例程............................................................................................................ 142 10.1 SynchCritSection例程需求.............................................................................................................. 142 10.1.1 使用SynchCritSection例程..................................................................................................... 142 10.1.2 运行SynchCritSection例程..................................................................................................... 143 10.1.3 SynchCritSection例程性能需求............................................................................................... 143 10.2 SynchCritSection例程功能.............................................................................................................. 143 10.2.1 为I/O操作对设备编程........................................................................................................... 143 10.2.2 维护有关中断驱动I/O操作的状态....................................................................................... 144 第11章 AdapterControl和ControllerControl例程....................................................................... 146 11.1 驱动程序控制例程.......................................................................................................................... 146 11.1.1 驱动程序控制例程语法和参数............................................................................................... 146 11.1.2 从DriverControl例程返回...................................................................................................... 147 11.1.3 设计有DriverControl例程驱动程序...................................................................................... 147 11.1.4 存储需求................................................................................................................................... 148 11.1.5 建立AdapterControl和ControllerControl例程.................................................................... 148 11.2 AdapterControl例程需求................................................................................................................. 149 11.3 ControllerControl例程需求.............................................................................................................. 150 第12章 Cancel例程....................................................................................................