Windows2000驱动程序开发大全.doc_第1页
Windows2000驱动程序开发大全.doc_第2页
Windows2000驱动程序开发大全.doc_第3页
Windows2000驱动程序开发大全.doc_第4页
Windows2000驱动程序开发大全.doc_第5页
已阅读5页,还剩1104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows 2000 驱动程序 开发大全 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 1 目录 1 前言前言 2 2 目录目录 5 3 第一卷第一卷 驱动程序编写者指南驱动程序编写者指南 43 4 第二卷第二卷 即插即用 电源管理和设置设计指南即插即用 电源管理和设置设计指南 54 5 第三卷第三卷 内核模式驱动程序设计指南内核模式驱动程序设计指南 210 6 第四卷第四卷 图形驱动程序设计指南图形驱动程序设计指南 403 7 第五卷第五卷 网络驱动程序设计指南网络驱动程序设计指南 761 第四章 数据传输 827 第五章 获取和设置WMI的微端口信息及NDIS支持 852 第六章 微端口的电源管理 863 第七章 重置 停止和关闭 869 第十二章 带WDM低级接口的微端口驱动程序 934 第十三章 IrDA微端口NIC驱动程序 938 NCF VIRTUAL NCF SOFTWARE ENUMERATED NCF PHYSICAL NCF MULTIPORT IN STANCED ADAPTER NCF HAS UI NCF HIDDEN NCF NOT USER REMOVABLE 1079 NCF VIRTUAL NCF SOFTWARE ENUMERATED 和和 NCF PHYSICAL 是相互排斥的 是相互排斥的 1079 对于物理适配器 对于物理适配器 BUSTYPE 项是必需的 对项是必需的 对 EISA 适配器 适配器 EISACOMPRESSEDID 项是必需项是必需 的 这个项说明了的 这个项说明了 EISA 压缩压缩 ID 和适配器掩码 多端口网络适配器需要和适配器掩码 多端口网络适配器需要 PORT1DEVICENUMBER 或或 PORT1FUNCTIONNUMBER 项 项 1079 成 如 成 如 MS DLC 1085 8 封底封底 1093 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 2 1 前言前言 使用本文档使用本文档 Microsoft Windows 2000 的驱动程序开发包 DDK 文档总览给您详尽的信息 这些信息对编 写 Windows2000 平台任何类型的驱动程序都是必须的 本文档也描述了 Windows Driver Model WDM 驱动程序 这些驱动程序在 Windows2000 和 Microsoft Windows 98 平台之间是源 码级兼容的 文档路标文档路标 下页的图表提供了本文档的一个路标 它说明了你需要读 DDK 的哪一部分 和基于你将要编写 的驱动程序类型 以怎样的顺序 发现最为有用的信息 下面是对 DDK 每一部分的简单描述 在该路标的在线版本上 你可通过点击各本书的图标或者 标题得到进一步的信息 版本说明版本说明 一个独立的文件 即 install htm 包括了从附送的 CD ROM 中安装在线 DDK 的系统需求 它也 包含了一些别处没有的 重要的 最新的信息 该文件放在安装 DDK 的根目录下 也在 CD ROM 安 装盘的 DDK 根目录下 新版本新版本 在本版本新内容部分里包括关于 Microsoft Windows 2000 里的新技术和驱动程序级接口的信 息 驱动程序编写者指南驱动程序编写者指南 驱动程序编写者指南告诉你怎样构建 测试和调试 Windows 2000 驱动程序 它包括下列信息 驱动程序开发环境 DDK 提供的 BUILD 应用程序 驱动程序测试 Driver Verifier 应用程序 可用来调试驱动程序的工具和例程 图表 设置 即插即用和电源管理设置 即插即用和电源管理 设置 即插即用及电源管理设计指南和参考手册覆盖了 Windows2000 的两个主要特性 即插即 用和电源管理 通过设计 WDM 驱动程序支持即插即用和电源管理 如果可能的话 任何专为 Windows 2000 编写的其他驱动程序均应该支持即插即用和电源管理 这些部分也包括了设备设置 该文档的这一部分提供设置 即插即用和电源管理的总体描述 对驱动程序说明信息 驱动程 序编写者也应该查阅本文档中特定种类的驱动程序 设置 即插即用和电源管理设计指南的第 1 部分包括关于即插即用和电源管理的介绍 它也描 述了驱动程序必须提供的技术支持类型 设置 即插即用和电源管理设计指南的第 2 部分包括一个即插即用的总览和驱动程序必须做什 么来支持即插即用 设置 即插即用和电源管理设计指南的第 3 部分包括关于编写支持电源管理的驱动程序的信息 这些章节提供了一个从驱动程序编写者角度所看到的电源管理总览 并描述了驱动程序必须提供的 支持 设置 即插即用和电源管理设计指南的第 4 部分包括设备设置的信息 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 3 设置 即插即用和电源管理参考手册的第 1 部分包括结构 IoXxx 例程和 IRP 的参考信息 这些 参考信息包含在即插即用支持里 设置 即插即用和电源管理参考手册的第 2 部分包括结构 PoXxx 例程和 IRP 的参考信息 这些 参考信息包含在电源管理支持里 设置 即插即用和电源管理参考手册的第 3 部分包括设备设置的参考信息 包括 INF 文件格式 的参考页 设置例程 设备安装功能及结构 以及文本模式设置文件格式 内核模式驱动程序内核模式驱动程序 内核模式驱动程序设计指南和参考覆盖了需求和系统定义的某些类型的外设驱动程序接口 包 括大部分 WDM 驱动程序 网络驱动程序和图形驱动程序包括在 DDK 不同的部分里 文件系统驱动 程序和过滤器包括在可安装的文件系统 IFS 包里 内核模式驱动程序设计指南的第 1 部分给 Windows2000 内核模式驱动程序编写者提供了有用的 信息 它覆盖了各种驱动程序 勾划出了系统的 I O 体系结构 并描述了每个驱动程序必须支持的 例程 内核模式驱动程序设计指南的第 2 至第 9 部分没有在本卷中印出 你将在附送的 CD ROM 上发 现这些信息 包括串行和并行设备 存储 输出 视窗管理手段 Windows Management Instrumentation WMI 和系统管理总线 System Management Bus SMB 等等 内核模式驱动程序参考手册已经被更新以便包括支持例程的参考内容 Windows2000 和 WDM 驱动程序能够调用这些例程 WDM 驱动程序编写者能够决定一个特别的支持例程是否能够通过在每 个支持例程参考里检查新的 Include 部分而被调用 从而来看是否那个支持例程在 wdm h 里输出 即在 WDM 驱动程序的主 DDK 头文件里输出 内核模式驱动程序参考手册的第 2 部分包括对 IRP 的描述 不同于 PnP 和电源 这些例程对内 核模式设备来说是总体上的描述 但对使用串行和并行端口的设备而言 则是详尽的描述 对 PnP 和电源 IRP 参见设置 即插即用和电源管理参考手册 对设备类型的 IRP 细节 参看这些设备类型 的单个文档 内核模式驱动程序参考手册的第 3 部分包括 SCSI 端口和 SCSI 微端口例程 新的改变微类例程和 相关结构的更新过的参考手册 内核模式驱动程序参考手册的第 4 部分包括 HID 驱动程序和 HID 客户使用的系统例程和结构的 参考手册 这部分也描述了 I O 请求和回调例程 这些 I O 请求和回调例程受键盘和鼠标设备 kbdclass mouclass i8042prt 主要的非 HID 系统驱动程序支持 内核模式驱动程序参考手册的第 5 部分覆盖了 USB 驱动程序 内核模式驱动程序参考手册的第 6 部分包括了由 IEEE1394 驱动程序所使用的系统定义的例程和 结构的参考手册 内核模式驱动程序参考手册的第 7 部分包括了关于 PCMCIA 驱动程序的信息 内核模式驱动程序参考手册的第 8 部分包括了关于 SMB 客户驱动程序的信息 内核模式驱动程序参考手册的第 9 部分描述了 WMI 内核模式数据提供者 内核流驱动程序内核流驱动程序 内核流驱动程序设计指南和参考手册覆盖了多媒体设备驱动程序的实现 如声卡 DVD 播放器 数码相机和电视调谐卡 内核流体系结构是 WDM 最基本的部分 为 Windows98 和 Windows2000 所 支持 内核流驱动程序设计指南和参考手册的总体部分包括一个内核流总览 所有的内核流驱动程序 都依赖本部分里的概念 内核流驱动程序设计指南和参考手册中的声频驱动程序部分描述了怎样为所有的声频设备 包 括声卡或者外部声音设备 来编写驱动程序 本部分包括 Microsoft DirectMusic 驱动程序文档 内核流驱动程序设计指南和参考手册的视频捕获驱动程序部分描述了怎样为流式视频 streaming video 设备 如数码相机和电视调谐卡 来编写驱动程序 图形驱动程序图形驱动程序 图形驱动程序设计指南和参考手册为下面的图形驱动程序描述了系统定义的接口和实现需求 显示和视频微端口驱动程序 打印机驱动程序 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 4 在每节的第 1 部分里包括与显示和打印机驱动程序有关的信息 由于 Windows2000 的推出 为 了反映设备驱动程序接口 DDI 和系统提供的图形驱动程序接口 GDI 额外的和变化的信息 所 有的章节已经被更新 在每节的第 2 部分包括显示和视频微端口驱动程序的详细信息 包括 GDI DDI Microsoft DirectDraw Microsoft Direct3D 和微端口驱动程序信息等章节里 在每本书的第 3 部分包括打印机的详细信息 这些章节描述了打印机驱动程序和 Windows2000 假脱机打印系统的体系结构 第 3 部分解释了怎样为新的打印机提供支持和怎样替换假脱机打印的 定制组件 第 4 部分 覆盖了微软的静止图像体系结构 它不包括在本卷里 但是包括在附送的 CD ROM 的 DDK 文档里 网络驱动程序网络驱动程序 网络驱动程序设计指南和参考手册描述了以下类型的网络驱动程序的系统定义的接口和实现需 求 微端口 NIC 驱动程序 中间网络驱动程序 它被置于微端口 NIC 驱动程序和协议驱动程序之间 网络传输堆栈里的协议驱动程序 系统定义的网络驱动程序接口包括网络驱动程序接口规范 NDIS 和传输驱动程序接口 TDI 网络驱动程序设计指南的第 1 部分覆盖了所有 Windows2000 网络驱动程序的常见主题 这些章 节讨论了 Windows2000 的网络驱动程序的体系结构 网络驱动程序的编程考虑 以及网络驱动程序 的设置 网络驱动程序设计指南的第 2 部分覆盖了微端口 NIC 驱动程序 包括 WAN 微端口 网络驱动程序设计指南的第 3 部分覆盖了中间层网络驱动程序 协议驱动程序和 Windows Sockets 的传输辅助程序 DLL TDI 设计信息没有包括在本卷里 但是包括在完全的在线 DDK 文档里 网络驱动程序设计指南的第 4 部分描述了面向连接的媒体的 NDIS 支持 如异步传输模式 ATM 和 ISDN 网络驱动程序设计参考手册的第 1 部分描述了 NDIS 提供的功能和宏 NDIS 驱动程序使用这些 功能和宏与系统和每个其他的部分进行通信 第 1 部分也描述了 NDIS 定义的和系统定义的结构 NDIS 驱动程序使用这些结构 下列 DDK CD ROM 文档没有刊印 驱动程序编写者指南 4 0 调试驱动程序 设置 即插即用和电源管理第 3 部分 5 0 编写电池微类驱动程序 内核模式驱动程序设计指南第 2 9 部分 串行和并行驱动程序 存储驱动程序 输入设备驱动程序 USB 驱动程序 IEEE 1394 驱动程序 PCMCIA 驱动程序 SMB 客户驱动程序 支持 WMI 图形驱动程序设计指南第 4 部分 静止图像驱动程序 网络驱动程序设计指南第 3 部分 4 0 6 0 TDI 例程 宏和回调 TDI 操作 Windows Sockets 的传输辅助程序 DLL 虚拟设备驱动程序 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 5 增补的文档 注意 在这些 DDK 参考书里 图形驱动程序参考和网络驱动程序参考没有刊印在本卷里 这些 参考部分仅仅是在线可用 2 目录目录 第一卷第一卷 驱动程序编写者指南驱动程序编写者指南 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 6 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 7 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 8 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 9 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 10 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 11 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 12 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 13 第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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 14 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 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 15 11 2 AdapterControl 例程需求 149 11 3 ControllerControl 例程需求 150 第12章 Cancel例程 151 12 1 Cancel 例程需求 151 12 2 处理可撤消 IRP 153 12 2 1 对传递 IRP 的驱动程序例程中可撤消 IRP 的处理 153 12 2 2 对处理请求的驱动程序例程中可撤消 IRP 的处理 154 12 2 3 使用系统撤消自旋锁 154 12 2 4 使用驱动程序提供的自旋锁和 Cancel 例程 155 12 3 Cancel 例程功能 159 12 3 1 带有 StartIo 例程的驱动程序中的 Cancel 例程 159 12 3 2 没有 StartIo 例程的驱动程序中的 Cancel 例程 160 12 4 处理可撤消 IRP 时的注意事项 160 第13章 IoCompletion例程 164 13 1 使用 IoCompletion 例程 164 13 1 1 建立 IoCompletion 例程 164 13 1 2 调用 IoCompletion 例程 165 13 1 3 为低层驱动程序分配 IRP 167 13 2 IoCompletion 例程需要的功能 168 第14章 IoTimer和CustomTimerDpc例程 170 14 1 定时器例程需求 170 14 2 IoTimer 例程功能 170 14 2 1 建立 IoTimer 例程 171 14 2 2 为 IoTimer 例程建立环境 171 14 2 3 使用 IoTimer 例程 171 14 3 CustomTimerDpc 例程功能 173 14 3 1 设置 CustomTimerDpc 例程 173 14 3 2 为 CustomTimerDpc 例程设置环境 174 14 3 3 使用 CustomTimerDpc 例程 174 第15章 Unload例程 177 15 1 Unload 例程需求 177 15 2 Unload 例程环境 177 15 3 Unload 例程功能 178 15 3 1 PnP 驱动程序的 Unload 功能 178 15 3 2 非 PnP 驱动程序的 Unload 功能 179 15 3 2 1 释放分配给驱动程序的资源 179 15 3 2 2 释放设备和控制器对象 180 第16章 常见的驱动程序设计问题 182 16 1 管理硬件优先级 183 16 2 使用自旋锁 185 16 2 1 为自旋锁和被保护数据提供存储空间 186 16 2 2 初始化自旋锁 187 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 16 16 2 3 调用使用了自旋锁的支持例程 187 16 2 4 快速释放自旋锁 188 16 2 5 使用自旋锁时防止错误或死锁的出现 189 16 3 轮询设备 190 16 3 1 驱动程序线程 191 16 4 管理内存的使用 191 16 4 1 使用系统内存 192 16 4 1 1 访问用户空间内存的驱动程序 192 16 4 1 2 为部分传输请求建立 MDL 192 16 4 1 3 分配系统空间内存 193 16 4 1 4 将总线相关的内存空间地址重新映射为虚地址 195 16 4 2 使用内核栈 196 16 4 3 使用后备列表 196 16 4 4 只读内存保护 197 16 5 为 DMA 和 PIO 维护缓存的一致性 198 16 5 1 在 DMA 操作期间刷新缓存数据 198 16 5 2 在 PIO 操作期间刷新缓存数据 199 16 6 错误记录和 NTSTATUS 值 199 16 6 1 调用 IoAllocateErrorLogEntry 200 16 6 2 填充错误记录包 200 16 6 3 设置错误记录包中的 NTSTATUS 值 202 16 6 4 调用 IoWriteErrorLogEntry 202 16 6 5 定义新的 IO ERR XXX 203 16 6 6 定义私有 NTSTATUS 常量 203 16 7 处理可删除存储介质 204 16 7 1 响应来自文件系统的验证请求 204 16 7 2 通知文件系统可能的存储介质改变 205 16 7 3 检查设备对象中的标志 205 16 7 4 在中间层驱动程序中建立 IRP 206 16 8 使设备对应用程序和驱动程序可用 206 16 8 1 注册设备接口 207 16 8 2 使设备接口可用和不可用 207 16 8 3 使用设备接口 208 16 9 可分页代码和数据 209 16 9 1 使驱动程序代码可分页 209 16 9 2 锁住可分页代码或数据 211 16 9 3 对整个驱动程序分页 213 16 10 常见的驱动程序可靠性问题 214 16 10 1 缓冲 I O 中的错误 214 16 10 2 引用用户空间地址时的错误 217 16 10 3 直接 I O 中的错误 219 16 10 4 调用者输入和设备状态的错误 220 Windows 2000 驱动程序开发大全 第 1 卷 设计指南 17 16 10 5 Dispatch 例程中的错误 222 16 10 6 多处理器环境中的错误 222 16 10 7 处理 IRP 时的错误 223 第第 4 4 卷卷 图形驱动程序设计指南图形驱动程序设计指南 1 第 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论