《Windows 2000驱动程序开发大全 第1卷 设计指南》PDF下载

  • 购买积分:29 如何计算积分?
  • 作  者:(美)MicrosoftCorporation著;冯博琴,朱丹军,薛涛等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2001
  • ISBN:7111089545
  • 页数:1197 页
图书介绍:本书为“Windows 2000驱动程序开发大全”的第1卷—设计指南。全书分五篇全面详尽地介绍了编写Windows 2000/98驱动程序所需的技术内容。包括利用Windows Driver Verifier构建、测试和调试Windows 2000驱动程序;怎样生成Windows Driver Model(WDM)驱动程序;描述了如何支持即插即用、电源管理特性及设备的设置和安装;详细介绍了编写内核模式、图形和网络驱动程序的细节。由于篇幅所限,DDK (Driver Development Kit)文档中有少部分内容没有包含在本套书中,但随套书附赠的光盘(见套书第2卷)中包含了DDK文档的完整信息。

目录 2

译者序 2

DDK文档说明 2

第一篇 驱动程序编写者指南 2

第1章 驱动程序开发环境 2

1.1 自由构建和检查构建 2

1.2 调试环境 3

第2章 测试驱动程序 4

2.1 DriverVerifier 4

2.2 Driver Verifier的能力 4

2.3 Driver Verifier对图形驱动程序的能力 9

2.4 激活和监视DriveeVerifier 12

1.1 什么是即插即用 21

第1章 即插即用和电源管理的介绍 21

第一部分 即插即用和电源管理的要求 21

第二篇 即插即用、电源管理和设置设计指南 21

1.1.1 PnP组件 22

1.1.2 PnP的支持级别 23

1.2 什么是电源管理 23

1.2.1 电源管理的最初含义 24

1.2.2 电源管理的支持级别 24

1.2.3 全系统范围电源管理的概述 24

1.2.4 电源状态 25

1.3 设备树 26

1.4 驱动程序层次和设备对象 27

1.4.1 驱动程序种类 27

1.4.2 例子:驱动程序层次 30

1.4.3 设备对象种类 32

1.4.4 例子:设备对象 34

2.2 PnP和电源管理DriverEntry例程 37

2.1 必需的PnP支持的概述 37

程序支持 37

第2章 PnP和电源管理必需的驱动 37

2.3 PnP和电源管理AddDevice例程 38

2.4 DispatchPnP例程 41

2.5 DispatchPower例程 41

2.6 PnP和电源管理Unload例程 42

第二部分 即插即用 43

第3章 理解PnP 43

3.1 PnP驱动程序设计准则 43

3.2 PnP和设备树 44

3.3 PnP设备状态 45

3.4 动态地添加一个新的PnP设备 46

3.5 硬件资源 53

3.6 在驱动程序里使用GUID 55

3.6.1 定义和导出新的GUID 55

3.6.2 在驱动程序代码里包含GUID 56

第4章 处理即插即用IRP的规则 58

4.1 PnP IRP需求 58

4.2 沿设备堆栈向下传递PnP IRP 59

4.3 延迟PnP IRP的处理直到低层 60

的驱动程序完成 60

第5章 启动、停止和删除设备 65

5.1 启动一设备 65

5.1.1 启动功能驱动程序里的一个设备 65

5.1.2 启动过滤器驱动程序里的一个设备 67

5.1.3 启动总线驱动程序里的一个设备 67

5.1.4 启动设备设计注意事项 67

5.2 为了资源重新平衡而停止一个设备 68

5.2.1 理解何时停止发布IRP 68

5.2.2 处理IRP_MN_QUERY_STOP_ 69

DEVICE请求 69

DEVICE请求 71

5.2.3 处理IRP_MN_STOP_DEVICE请求 71

5.2.4 处理IRP_MN_CANCEL_STOP_ 71

5.2.5 当一个设备被暂停时,保留进 72

入的IRP 72

5.3 删除一个设备 73

5.3.1 理解何时发布删除IRP 73

5.3.2 处理一个IRP_MN QUERY_REMOVE 76

_DEVICE请求 76

5.3.3 处理一个IRP_MN_REMOVE_ 77

DEVICE请求 77

5.3.4 处理一个IRP_MN_CANCEL_ 81

REMOVE_DEVICE请求 81

5.3.5 处理一个IRP_MN_SURPRISE_ 82

REMOVAL请求 82

6.1 PnP通知概述 85

第6章 使用PnP通知 85

6.2 编写PnP通知回调例程的准则 86

6.3 使用PnP设备接口改变通知 87

6.3.1 为设备接口改变通知注册 87

6.3.2 处理设备接口改变事件 88

6.4 使用PnP目标设备改变通知 88

6.4.1 注册目标设备改变通知 88

6.4.2 处理一个GUID_TARGET_DEVICE 89

_QUERY_REMOVE事件 89

6.4.3 处理一个GUID_TARGET_DEVICE_ 89

REMOVE_COMPLETE事件 89

6.4.4 处理一个GUID_TARGET_DEVICE_ 90

REMOVE_CANCELED事件 90

6.5 使用PnP硬件配置文件改变通知 90

6.5.1 注册硬件配置文件改变通知 90

6.6 使用PnP定制通知 91

6.5.2 处理硬件配置文件改变事件 91

第7章 支持多功能设备 93

7.1 支持多功能PC Card设备 93

7.1.1 支持遵照多功能标准的PC Card 94

7.1.2 支持有不完全配置寄存器地址 94

的PC Card 94

7.1.3 支持有不完全配置寄存器的PC Card 96

7.2 支持多功能PCI设备 99

7.3 支持其他总线上的多功能设备 100

7.4 使用系统提供的mfsys 100

7.5 为一个多功能设备生成资源图 103

8.1 内核模式下的电源管理组件 105

8.1.1 ACPI BIOS 105

8.1.2 ACPI驱动程序 105

第三部分 电源管理 105

第8章 在驱动程序内支持电源管理 105

8.1.3 电源管理器 106

8.1.4 电源管理中驱动程序的作用 106

8.2 驱动程序的电源管理职能 107

8.2.1 报告设备的电源能力 107

8.2.2 对电源管理设置设备对象标记 110

8.2.3 处理电源IRP 110

8.2.6 激活设备唤醒能力 114

8.2.4 设备的加电 114

8.2.5 设备的掉电 114

8.3 处理电源IRP的规则 115

8.3.1 使用PoCallDriver 115

8.3.2 传递电源IRP 115

8.3.3 设备休眠时排队I/O请求 117

8.3.4 处理未被支持的或者无法识别 117

的电源IRP 117

9.1 设备电源状态 118

第9章 独立设备的电源管理 118

9.1.1 设备工作状态D0 119

9.1.2 设备休眠状态D1、D2、和D3 119

9.1.3 设备电源状态所需的支持 120

9.2 管理设备电源策略 121

9.3 为设备电源状态处理IRP_MN_SET 122

_POWER 122

9.3.1 处理设备掉电IRP 122

9.3.2 处理设备加电IRP 125

9.3.3 设备电源IRP的IoCompletion例程 126

9.4 为设备电源状态处理IRP_MN_ 127

QUERY_POWER 127

9.5 为设备电源状态发送IRP_MN_QUERY_ 129

POWER或者IRP_MN_SET_POWER 129

9.6 检测空闲的设备 130

9.6.1 用于空闲检测的电源管理器例程 131

9.6.2 执行设备特定的空闲检测 131

第10章 处理系统电源状态请求 132

10.1 系统电源状态 132

10.1.1 系统工作状态S0 133

10.1.2 系统休眠状态S1、S2、S3和S4 133

10.1.3 系统关机状态S5 134

10.1.4 系统电源动作 135

10.2 系统电源策略 135

10.3 防止系统电源状态变化 136

10.4 为系统电源状态处理IRP_MN_ 136

QUERY_POWER 136

10.4.1 使系统查询电源IRP失效 137

10.4.2 在设备电源策略所有者中处理 137

系统查询电源IRP 137

查询电源IRP 138

10.4.3 在总线驱动程序中处理系统 138

10.4.4 在过滤器驱动程序中处理系统 139

查询电源IRP 139

10.5 为系统电源状态处理IRP_MN_ 139

SET_POWER 139

10.5.1 在设备电源策略所有者中 140

处理系统设置电源IRP 140

10.5.2 在总线驱动程序中处理系统设置 141

电源IRP 141

10.5.3 在过滤器驱动程序中处理系统设置 141

电源IRP 141

第11章 支持具有唤醒能力的设备 143

11.1 等待/唤醒操作综述 143

11.1.1 确定设备是否能唤醒系统 144

IRP的路径 145

11.1.2 理解通过设备树的等待/唤醒 145

11.1.3 完成等待/唤醒IRP综述 149

11.2 处理等待/唤醒IRP的步骤 150

11.2.1 在功能驱动程序或者过滤器驱 150

动程序中处理等待/唤醒IRP 150

11.2.2 在总线驱动程序中处理等待/ 151

唤醒IRP 151

11.3 发送等待/唤醒IRP 152

11.2.3 等待/唤醒IRP的IoCompletion例程 152

11.3.1 确定何时发送等待/唤醒IRP 153

11.3.2 等待/唤醒IRP请求 153

11.3.3 等待/唤醒的回调例程 153

11.3.4 撤消等待/唤醒IRP 154

11.4 等待/唤醒IRP的Cancel例程 155

第四部分 设置 157

第12章 设备安装概述 157

12.1 设备安装组件 157

12.2 PnP设备安装示例 159

12.3 Setup如何为设备选择驱动程序 161

12.4 系统设置阶段 164

第13章 为设备提供驱动程序 166

13.1 驱动程序文件 166

13.2 注册表中的驱动程序信息 167

13.3 指定驱动程序装载顺序 168

13.4 安装过滤器驱动程序 170

13.5 为设备安装Null驱动程序 171

第14章 建立INF文件 173

14.1 INF文件的一般准则′ 173

14.2 为设备文件说明源和目标位置 174

14.3 建立跨平台的和/或双操作系统 175

的INF文件 175

14.4 建立国际化的INF文件 176

的安全性 177

14.5 在设备的INF文件中加强打开文件 177

14.6 从应用程序访问INF文件 178

14.6.1 打开和关闭INF文件 178

14.6.2 从INF文件提取信息 178

第15章 编写协作安装程序 179

15.1 协作安装程序概述 179

15.2 协作安装程序界面 181

15.3 协作安装程序操作 182

15.4 注册协作安装程序 185

15.4.1 注册设备专用的协作安装程序 185

15.4.2 注册类协作安装程序 186

第16章 编写类安装程序 188

16.1 类安装程序界面 188

16.2 设备安装函数小结 189

16.4 在类安装程序的INF文件中加强 190

文件打开的安全性 190

16.3 注册类安装程序 190

第17章 编写定制设备安装应用程序 191

17.1 安装与驱动程序共用的软件实用程序 191

17.2 定制安装应用程序准则 191

第18章 提供设备属性页 193

18.1 设备属性页所需的支持 193

18.2 处理DIF_ADDPROPERTYPAGE 194

_ADVANCED请求 194

18.3 属性页回调函数 195

18.4 处理属性页的Windows消息 195

第19章 设备安装疑难解答 198

19.1 使用SetupAPI记录日志 199

19.1.1 设置SetupAPI记录日志级别 199

19.1.2 解释SetupAPI日志文件示例 201

19.2 显示设备管理器中的隐藏设备 203

设备 204

第20章 安装一个要求重新启动机器的 204

第三篇 内核模式驱动程序设计指南 208

第1章 Windows 2000和WDM驱动程序 208

1.1 Windows 2000组件概述 208

1.2 Windows 2000中的驱动程序种类 209

1.3 Windows 2000和WDM驱动程序的 211

设计目标 211

1.3.1 可移植性 212

1.3.2 可配置性 212

1.3.3 永远抢占优先和永远中断 213

1.3.4 多处理器安全 214

1.3.5 基于对象 216

1.3.6 带有可重用IRP的包驱动I/O 216

1.3.7 支持异步I/O 217

第2章 分层的I/O、IRP和I/O对象 218

2.1 Windows 2000 I/O模型概述 218

文件对象 219

2.3 IRP和驱动程序特定的I/O栈位置 222

2.4 驱动程序对象和标准驱动程序例程 227

2.4.1 对象的不透明性 229

2.4.2 标准驱动程序对象入口点 229

2.4.3 其他标准驱动程序例程 230

2.4.4 标准驱动程序例程的注意事项 232

2.5 设备配置和分层驱动程序 232

2.5.1 样例设备和驱动程序配置 233

2.5.2 添加驱动程序的注意事项 234

2.6 设备对象和分层驱动程序 234

2.6.1 针对样本配置的设备对象 235

2.6.2 设备对象的注意事项 236

序的支持 237

3.1 系统组件和分层内核模式驱动程序 237

第3章 系统定义的对象和对驱动程 237

3.1.1 操纵系统定义的对象的支持例程 238

3.1.2 存储系统定义的对象 240

3.2 设备对象和设备扩展 241

3.2.1 定义设备扩展 242

3.2.2 创建设备对象和设备扩展 243

3.2.3 初始化驱动程序特定的设备 244

对象和设备扩展 244

3.2.4 设置用户缓冲区的访问 245

3.3 适配器对象和DMA 251

3.3.1 映射寄存器 252

3.3.2 获取适配器对象 254

3.3.3 拆分传输请求 255

3.3.4 使用系统DMA 256

3.3.5 使用总线控制器DMA 263

3.3.6 执行发散/收集DMA 270

3.4 控制器对象 271

3.4.1 创建带有控制器扩展的控制器对象 272

3.4.2 为I/O操作分配控制器对象: 273

3.5 中断对象 275

DIRQL和处理器掩码 276

3.5.2 注册ISR 276

3.5.1 获得系统指定的中断向量、 276

3.6 DPC对象 278

3.6.1 注册和排队DpcForIsr例程 278

3.6.2 注册和排队CustomDpc例程 279

3.7 带有相关的DPC的定时器对象 281

3.7.1 注册和启用IoTimer例程 281

3.7.2 注册和排队CustomTimerDpc例程 282

3.8 设备队列对象和互锁队列 284

3.8.1 设置设备队列对象和排队IRP 285

3.8.2 设置一个互锁队列和排队IRP 286

3.9 内核调度者对象 288

3.9.1 定时器对象 290

3.9.2 事件对象 292

3.9.3 信号量对象 294

3.9.4 互斥体对象 296

3.9.5 线程在调度者对象上等待的 299

报警和APC的处理 299

3.10 回调对象 300

3.10.1 定义回调对象 300

3.10.2 使用驱动程序定义的回调对象 301

3.10.3 使用系统定义的回调对象 302

第4章 驱动程序基本结构 304

4.1 标准驱动程序例程 304

4.2 最低层设备驱动程序的分段IRP处理 306

4.3 中间层驱动程序的分段IRP处理 311

4.4 设计和开发一个驱动程序 313

4.4.1 设备对象命名和设备接口注册 313

4.4.2 为驱动程序例程选择名字 314

4.4.3 开始设计 314

4.4.4 开始开发 316

5.1 DriverEntry例程需求 319

5.1.1 DriverEntry例程语法与参数 319

第5章 DriverEntry和Reinitialize例程 319

5.2 DriverEntry例程功能 320

5.2.1 DriverEntry例程必备功能 320

5.1.2 DriverEntry返回值 320

5.2.2 DriverEntry可选功能 321

5.3 Reinitialize例程需求与功能 322

第6章 Dispatch例程 324

6.1 Dispatch例程需求 324

6.1.1 Dispatch例程一般实现 325

6.1.2 Dispatch例程条件实现 325

6.2 Dispatch例程基本功能 326

6.2.2 如何在一个Dispatch例程中 327

完成一个IRP 327

6.2.1 何时检查I/O栈位置 327

6.2.3 何时在Dispatch例程中完成一个IRP 328

6.2.4 如何从一个Dispatch例程传送带 329

有效参数的IRP 329

6.2.5 为较低层驱动程序分配IRP 330

6.2.6 处理异步传输请求 331

6.3 Dispatch例程设计 331

6.3.1 DispatchCreate和DispatchClose功能 332

6.3.2 DispatchCleanup功能 334

6.3.3 DispatchRead或DispatchWrite功能 335

6.3.4 Dispatch(Internal)DeviceControl功能 339

第7章 StartIo和队列管理例程 344

7.1 排队IRP 344

7.2 StartIo例程需求 345

7.2.1 设备驱动程序中的StartIo例程 345

7.2.2 StartIo例程功能 347

7.2.3 I/O操作设备编程 349

7.2.4 较高层驱动程序中的StartIo例程 349

7.2.5 实现StartIo的注意事项 350

7.3 使用互锁队列或设备队列的需求 351

7.3.1 驱动程序管理的队列的存储需求 351

7.3.4 用驱动程序创建的线程管理互锁 352

7.3.3 在驱动程序管理的队列中排队IRP 352

队列 352

7.3.2 建立驱动程序管理的队列 352

7.3.5 管理补充设备队列 353

8.1 ISR需求 357

8.1.1 ISR性能 357

第8章 中断服务例程 357

8.1.3 建立一个ISR 358

8.2 ISR基本功能 358

8.1.2 其他需要的驱动程序例程 358

8.3 重叠I/O操作的ISR功能 359

9.1 DpcForIsr和CustomDpc例程需求 361

9.1.1 DpcForIsr例程与CustomDpc例程 361

第9章 DpcForIsr例程和CustomDpc例程 361

9.1.2 DpcForIsr例程基本需求 362

9.1.3 CustomDpc例程基本需求 362

9.1.4 其他需要的驱动程序例程 363

9.1.5 建立DpcForIsr和CustomDpc例程 363

9.2 DpcForIsr和CustomDpc功能 364

9.2.1 使用缓冲I/O和满足设备控制IRP 365

9.2.2 直接I/O使用 365

9.2.3 实现一个DpcForIsr或CustomDpc 366

例程的注意事项 366

10.1 SynchCritSection例程需求 368

10.1.1 使用SynchCritSection例程 368

第10章 SynchCritSection例程 368

10.2 SynchCritSection例程功能 369

10.1.3 SynchCritSection例程性能需求 369

10.2.1 为I/O操作对设备编程 369

10.1.2 运行SynchCritSection例程 369

10.2.2 维护有关中断驱动I/O操作的状态 370

11.1 驱动程序控制例程 373

Control例程 373

11.1.1 驱动程序控制例程语法和参数 373

第11章 AdapterControl和Controller 373

驱动程序 374

11.1.3 设计有DriverControl例程的 374

11.1.4 存储需求 374

11.1.2 从DriverControl例程返回 374

11.1.5 建立AdapterControl和Controller 375

Control例程 375

11.2 AdapterControl例程需求 376

11.3 ControllerControl例程需求 376

第12章 Cancel例程 378

12.1 Cancel例程需求 378

12.2 处理可撤消IRP 379

12.2.2 在处理请求的驱动程序例程中 380

处理可撤消IRP 380

处理可撤消IRP 380

12.2.1 在传递IRP的驱动程序例程中 380

12.2.4 与Cancel例程一起使用驱动程序 381

提供的自旋锁 381

12.2.3 使用系统撤消自旋锁 381

12.3 Cancel例程功能 385

12.3.2 不带有StartIo例程的驱动程序中 386

Cancel例程 386

的Cancel例程 386

12.3.1 带有StartIo例程的驱动程序中的 386

12.4 处理可撤消IRP时的注意事项 387

13.1 使用IoCompletion例程 389

13.1.1 建立IoCompletion例程 389

第13章 IoCompletion例程 389

13.1.2 调用IoSetCompletion Routine 390

13.1.3 为低层驱动程序分配IRP 392

13.2 IoCompletion例程需要的功能 393

14.1 定时器例程需求 395

14.2 IoTimer例程功能 395

第14章 IoTimer和CustomTimerDpc例程 395

14.2.2 为IoTimer例程建立环境 396

14.2.3 使用IoTimer例程 396

14.2.1 建立IoTimer例程 396

14.3 CustomTimerDpc例程功能 397

14.3.1 设置CustomTimerDpc例程 398

14.3.2 为CustomTimerDpc例程设置环境 398

14.3.3 使用CustomTimerDpc例程 399

15.1 Unload例程需求 401

15.2 Unload例程环境 401

第15章 Unload例程 401

15.3.1 PnP驱动程序的Unload功能 402

15.3.2 非PnP驱动程序的Unload功能 402

15.3 Unload例程功能 402

第16章 常见的驱动程序设计问题 405

16.1 管理硬件优先级 405

16.2 使用自旋锁 407

16.2.1 为自旋锁和被保护数据提供 408

存储空间 408

16.2.2 初始化自旋锁 409

16.2.3 调用使用了自旋锁的支持例程 409

16.2.4 快速释放自旋锁 410

16.2.5 使用自旋锁时防止错误或死锁 412

的出现 412

16.3 轮询设备 413

16.4 管理内存的使用 414

16.4.1 使用系统内存 415

16.4.2 使用内核栈 419

16.4.3 使用后备列表 420

16.4.4 只读内存保护 421

16.5.1 在DMA操作期间刷新高速 422

缓存数据 422

16.5 为DMA和PIO维护高速缓存的一致性 422

16.5.2 在PIO操作期间刷新高速缓存数据 423

16.6 错误记录和NTSTATUS值 423

16.6.1 调用IoAllocateErrorLogEntry 424

16.6.2 填充错误记录包 424

16.6.3 设置错误记录包中的NTSTATUS值 426

16.6.5 定义新的IO_ERR_XXX 427

16.6.6 定义私有NTSTATUS常量 427

16.6.4 调用IoWriteErrorLogEntry 427

16.7 处理可删除介质 428

16.7.1 响应来自文件系统的验证请求 428

16.7.2 通知文件系统可能的介质改变 429

16.7.4 在中间层驱动程序中建立IRP 430

16.8 使设备对应用程序和驱动程序可用 430

16.7.3 检查设备对象中的标志 430

16.8.1 注册设备接口 431

16.8.2 激活和禁止设备接口 432

16.8.3 使用设备接口 432

16.9 可分页代码和数据 433

16.9.1 使驱动程序代码可分页 433

16.9.2 锁住可分页代码或数据 435

16.9.3 对整个驱动程序分页 437

16.10 常见的驱动程序可靠性问题 438

16.10.1 缓冲I/O中的错误 439

16.10.2 引用用户空间地址时的错误 442

16.10.3 直接I/O中的错误 443

16.10.4 调用者输入和设备状态中的错误 444

16.10.5 Dispatch例程中的错误 446

16.10.6 多处理器环境中的错误 447

16.10.7 处理IRP时的错误 448

第一部分 图形驱动程序 451

第1章 图形系统概述 451

第四篇 图形驱动程序设计指南 451

第2章 对图形驱动程序的GDI支持 452

2.1 从驱动程序的观点看GDI 452

2.1.1 作为应用程序图形语言的GDI 453

2.1.2 作为绘制引擎的GDI 453

2.2 GDI/驱动程序的分工 454

2.2.1 GDI和驱动程序的通信 454

2.2.2 PDEV协商 455

2.2.3 表面协商 456

2.3 GDI支持的服务 460

2.3.1 GDI对表面的支持 460

2.3.2 GDI对调色板的支持 461

2.3.3 路径的GDI服务 462

2.3.4 GDI绘图服务及其他 462

2.3.5 GDI字体和文本服务 463

2.4 浮点数支持 464

2.5 数据类型 464

2.3.6 GDI支持的服务及其他 464

3.1 图形驱动程序函数支持 466

3.1.1 必需的图形驱动程序函数 466

第3章 支持DDI 466

程序函数 467

3.1.3 可选的图形驱动程序函数 467

3.1.2 有条件地需要的图形驱动 467

3.2 支持初始化和终止函数 469

3.2.1 驱动程序初始化和清除 469

3.2.2 PDEV初始化和清除 470

3.2.3 启用和禁用表面 471

3.3 创建设备相关位图 471

3.4 支持图形输出 472

3.4.1 绘制直线和曲线 472

3.4.2 绘制和填充路径 476

3.4.3 拷贝位图 478

3.4.4 过渡调色技术 480

3.4.5 图像颜色管理 480

3.5.1 管理调色板 481

3.5.2 实现画刷 481

3.5 支持DDI颜色和调色板函数 481

3.6 支持DDI字体和文本函数 482

3.6.1 管理和优化字体 482

3.6.2 绘制文本 485

第4章 显示器介绍 487

4.1 显示器体系结构 487

第二部分 显示器和视频微端口驱动程序 487

4.1.1 显示器驱动程序职责 488

4.1.2 视频微端口驱动程序职责 488

4.2.3 协处理器 489

4.2.2 加速器 489

4.2.4 VGA 489

4.3 一般的设计和实现策略 489

4.2.1 帧缓冲区 489

4.2 图形适配器的类型 489

驱动程序通信 490

4.4.1 通过IOCTL和视频微端口 490

4.4.2 访问帧缓冲区和硬件寄存器 490

4.4 访问图形适配器 490

4.5 创建图形INF文件 491

4.5.1 INF GeneralConfigData节 492

4.5.2 显示器INF文件节 492

4.5.3 监视器INF文件节 493

4.6.1 INF和安装的要求 495

的兼容性测试要求 495

4.6.2 视频微端口驱动程序的要求 495

4.6 显示器和视频微端口驱动程序 495

4.6.3 显示器驱动程序的要求 496

4.6.4 控制面板的要求 496

5.1 显示器驱动程序DDI函数 497

5.1.1 必需的显示器驱动程序函数 497

第5章 显示器驱动程序 497

程序函数 498

5.1.3 可选的显示器驱动程序函数 498

5.1.2 有条件地需要的显示器驱动 498

5.2 显示器驱动程序初始化 499

5.3.2 返回显示器模式:DrvGetModes 501

5.3.1 切换桌面:对DrvAssertMode的响应 501

5.3.3 支持多PDEV 501

5.3 桌面管理 501

5.4 指针控制 503

5.4.1 指针绘制 504

5.5 管理显示器调色板 505

5.4.3 移动指针:DrvMovePointer 505

5.6 显示器驱动程序中的位图 505

5.4.2 控制指针:DrvSetPointerShape 505

5.7 异步绘图 506

5.9 显示器驱动程序的特别效果 507

5.10 显示器的颜色管理 507

5.8 显示器驱动程序中的透明性 507

5.11 DirectDraw和GDI 509

5.12 跟踪窗口变化 509

5.13 支持DitherOnRealize标志 511

5.14 支持分组的帧缓冲区 511

5.15 卸载视频硬件 514

5.16 显示器驱动程序中的多监视器支持 514

5.17 镜像驱动程序 515

5.17.1 镜像驱动程序INF文件 516

5.17.2 镜像驱动程序安装 516

5.18.1 Newdisp:动态重装显示器 517

驱动程序 517

5.18 显示器驱动程序测试工具 517

5.18.2 允许的驱动器加速的动态改变 518

代码和参考 519

6.1 DirectDraw驱动程序头文件、示例 519

6.2 DirectDraw体系结构概述 519

第6章 DirectDraw DDI 519

6.2.1 关于DirectDraw 521

6.2.2 DirectDraw驱动程序 521

6.2.3 硬件仿真层次 522

6.3 DirectDraw驱动程序基础 522

6.3.1 DirectDraw表面 523

6.3 显示内存 524

6.3.3 内存配置例子 526

6.3.4 交换 532

6.3.5 使用图阵 537

6.3.6 假定状态信息的驱动程序 539

6.3.7 打开显示卡并在Windows 95/Windows98上改变模式 539

6.4 DirectDraw驱动程序初始化 540

6.5 DirectX视频端口扩展 541

6.5.1 视频端口扩展背景 542

DirectDraw接口 546

6.5.3 内核模式视频传输支持的 546

6.6 颜色控制初始化 546

6.5.2 DirectX VPE的初始化 546

6.7 AGP支持 547

6.7.1 标志为支持非本地显示内存 547

6.7.2 指定非本地显示内存堆 548

6.7.3 实际堆基地址的通知 548

6.7.4 非本地显示内存表面的回调处理 549

6.7.5 在非本地显示内存中重新排序纹理 550

6.7.6 处理DMA样式的AGP 550

6.8.1 VPE和内核模式视频传输的 552

体系结构 552

6.8 内核模式视频传输 552

6.8.2 使用内核模式视频传输 553

6.8.3 Windows 2000的DxApi微端口功能 554

6.9 扩展表面定位 555

6.9.1 旧式定位方法的回顾 556

6.9.2 使用扩展的表面定位 556

6.10 扩展的表面能力 557

6.10.1 新的表面能力 557

6.10.2 暴露扩展表面能力 558

6.10.3 扩展的堆限制 558

6.10.4 扩展的表面描述结构 559

6.11 压缩纹理表面 559

6.11.2 创建压缩纹理表面 560

6.11.3 使用压缩纹理表面 560

6.11.1 列举DXT格式 560

6.12 运动补偿 561

6.13 返回DirectDraw和Direct3D的值 562

和参考 564

7.1 Direct3D DDI头文件、示例代码 564

7.2 跨平台Direct3D驱动程序开发 564

第7章 Direct3D DDI 564

7.3.1 所需的Direct3D驱动程序回调 565

函数和函数 565

7.3 Direct3D驱动程序回调函数和函数 565

返回码 566

7.3.3 Direct3D驱动程序回调函数的 566

7.4 Direct3D驱动程序初始化 566

7.3.2 操作码处理 566

7.5 Direct3D环境管理 567

7.5.3 在环境中维护状态 568

7.5.2 删除环境 568

7.5.4 Direct3D表面处理概览 568

7.5.1 建立环境 568

是一个指向表面的指针 569

7.5.6 为什么驱动程序方的结构不能只 569

7.5.7 D3dCreateSurfaceEx和后援表面 569

7.5.5 进一步了解句柄以及通过D3dCreateSurfaceEx创建驱动程序方表面的结构 569

7.5.8 使用D3dCreateSurfaceEx要考 570

虑的其他问题 570

7.6 Direct3D纹理管理 571

7.6.1 多纹理 572

7.6.2 调色板纹理 577

7.6.3 纹理位块转移 577

7.7 绘图原语和状态改变 578

7.7.1 命令和顶点缓冲区 578

7.6.4 驱动程序管理的纹理 578

7.7.2 Direct3D命令缓冲区 580

7.7.3 Direct3D顶点缓冲区 582

7.7.4 加速状态管理 582

7.8 柔性顶点格式 583

7.9 Direct3D驱动程序的高级主题 586

7.9.1 优化的纹理 586

7.9.2 模板位面 587

7.9.3 Guard Band Clipping 588

7.9.4 范围调整 589

7.9.5 W缓冲区 589

7.9.6 Bump Mapping 590

7.9.7 硬件变换和照明 591

7.10 Direct7.0发行事项 599

7.10.1 FVF更新 600

7.10.2 光栅更新 600

第8章 小型客户驱动程序 601

8.1 MCD头文件、示例代码和参考 601

8.2 MCD体系结构 601

8.3 MCD接口 603

8.3.1 必需的MCD函数 603

8.3.2 特定条件下必需的MCD函数 603

8.3.3 可选的MCD函数 603

8.4 MCD初始化 604

8.5 绘制设备环境 605

8.4.1 Hdev句柄 605

8.4.2 像素格式 605

8.5.1 设备环境的创建 606

8.5.3 设备环境删除 607

8.5.4 状态 607

8.5.2 设备环境绑定 607

8.5.5 视口 608

8.6 内存管理 608

8.7.2 查询绘制缓冲区 609

8.7.1 分配绘制缓冲区 609

8.7.3 交换绘制缓冲区 609

8.7 帧缓冲区管理 609

8.8 绘制操作 610

8.8.1 绘制OpenGL的原语 610

8.7.4 MCD中的窗口跟踪 610

8.8.2 绘制间距 612

8.8.3 清除缓冲区 613

8.8.4 同步化 613

8.9.1 纹理环境状态 614

8.9.2 纹理状态 614

8.9 纹理映像 614

8.10 像素操作 616

8.11 分层平面 617

8.11.1 描述分层平面 617

8.11.2 交换分层平面 618

8.11.3 管理分层调色板 618

第9章 视频微端口驱动程序 619

9.1 视频微端口头文件、示例代码和参考 619

9.2 在图形体系结构中的视频微端口 620

驱动程序 620

9.3 视频微端口驱动程序接口 621

9.3.1 必需的微端口驱动程序函数 621

动程序函数 622

9.3.3 可选的视频微端口驱动程序 622

9.3.2 有条件必需的视频微端口驱 622

9.4 视频微端口驱动程序的初始化 623

9.4.1 启动视频微端口驱动程序 623

9.4.2 声明继承资源 626

视频微端口 627

9.5 视频微端口设备扩展 627

9.4.3 为与显示驱动程序通信而初始化 627

9.6 视频微端口的注册表回调函数 628

9.7 处理视频请求 628

9.7.1 系统定义的IOCTL_VIDEO_XXX 629

请求 629

请求 630

9.7.3 处理不支持的IOCTLVIDEO_XXX 630

9.8 在视频微端口中支持PnP及电源管理 630

_XXX请求 630

9.7.2 自定义的显示微端口IOCTL_VIDEO 630

9.9.2 从AGP使用中释放内存 631

9.9.1 通过AGP存取系统内存 631

9.10 图形适配器的子设备 631

9.9 在视频微端口驱动程序中使用AGP 631

9.10.2 与子设备驱动程序通信 632

9.11 视频微端口中的中断 632

9.10.1 侦测子设备 632

9.13 在视频微端口中对适配器重置 634

9.14 微端口驱动中的镜像驱动程序支持 634

9.12 视频微端口的定时器 634

支持 635

9.15.1 查询TV连接器及硬件的拷贝保护 635

9.15 视频微端口的TV连接器及拷贝保护 635

9.15.2 设置TV连接器及拷贝保护硬件 636

9.16.1 基于x86机器的窗口式VDM 637

9.16.2 基于x86机器的全屏VDM 637

9.16 VGA兼容的微端口SvgaHwIoPortXxx 637

9.16.3 VGA兼容的微端口的HwFind 638

Adapter 638

9.16.4 在SvgaHwIoPortXxx中验证指令 639

9.17 将Windows NT 4.0的微端口驱动程序 640

转换到Windows 2000 640

9.16.5 VGA兼容的HwVidStartIO 640

第三部分 打印驱动程序和假脱机组件 643

第10章 打印介绍 643

第11章 打印假脱机程序的体系结构 644

11.1 假脱机组件介绍 644

11.2 打印提供者 645

12.1 打印机驱动程序组件 652

12.2 打印机图形DLL 652

第12章 打印机驱动程序体系结构 652

12.3 打印机接口DLL 659

12.4 打印机数据文件 660

第13章 微软通用打印机驱动程序 661

13.1 通用打印机驱动程序介绍 661

13.1.1 Unidrv能力 662

13.1.2 Unidrv组件 662

13.1.3 Unidrv小驱动程序 663

13.1.4 Unidrv用户接口 663

13.1.6 GPD文件实例 664

13.1.7 微软小驱动程序开发工具 664

13.1.5 Unidrv绘制器 664

13.2 GPD文件介绍 665

13.2.1 GPD文件条目 665

13.2.2 基本单位 676

13.2.3 在小驱动程序中使用多个GPD文件 677

13.2.4 在小驱动程序中使用资源DLL 677

13.3.2 属性类型 678

13.3.1 打印机属性格式 678

13.3.3 一般属性 678

13.3 打印机属性 678

13.4 打印机命令 687

13.4.1 命令条目格式 687

13.4.2 命令名称 688

13.4.3 命令属性 694

13.4.4 命令字符串格式 695

13.4.5 命令执行顺序 697

13.5 打印机特性 699

13.5.1 标准特性 699

13.5.2 定制特性 700

13.5.3 特性条目格式 701

13.5.4 特性属性 702

13.5.5 特性冲突优先级 703

13.6 打印机选项 704

13.6.1 标准选项 704

13.6.3 选项条目格式 708

13.6.4 选项属性 708

13.6.2 定制选项 708

13.6.5 选项限制 715

13.7 打印机字体描述 717

13.7.1 硬件驻留字体 718

13.7.2 Cartridge字体 718

13.7.3 字体替换 719

13.8 条件语句 720

13.9 压缩光栅数据 723

13.9.1 使用Unidrv支持的压缩 723

13.10 过滤光栅数据 724

13.11 处理颜色格式 724

13.9.2 使用定制的压缩 724

13.12 用Unidrv过渡调色 725

13.12.1 GDI提供的过渡调色 725

13.12.2 驱动程序提供的过渡调色 726

13.12.3 设备提供的过渡调色 728

13.13 控制图像质量 728

13.14 处理可安装的特性及选项 731

13.15 指定特性和选项显示的顺序 732

13.16 描述打印机内存配置 733

13.17 指定纸张尺寸 734

13.17.1 支持标准纸张尺寸 735

13.17.2 支持厂商定义的纸张尺寸 735

13.17.3 支持用户定义的纸张尺寸 736

13.18 引用场所 740

13.19 安装一个Unidrv小驱动程序 741

14.1 Pscript能力 743

14.2 Pscript组件 743

第14章 微软PostScript打印机驱动程序 743

14.3 Pscript小驱动程序 744

14.3.1 转换AFM文件到NTF文件 745

14.3.2 安装Pscript小驱动程序 746

14.4 Pscript用户接口 746

14.5 Pscript绘制器 747

15.1 绘图仪驱动程序能力 748

15.2 绘图仪驱动程序组件 748

第15章 微软绘图仪驱动程序 748

15.3 绘图仪驱动程序文件示例 749

15.4 绘图仪驱动程序的小驱动程序 749

15.5 绘图仪驱动程序用户接口 752

15.6 绘图仪驱动程序绘制器 753

16.1 用户接口插件 754

16.1.1 用户接口插件介绍 754

第16章 定制微软的打印机驱动程序 754

16.1.2 UI插件的例子 755

16.1.3 UI插件的COM接口 755

16.1.6 修改一个驱动程序提供的属性 756

16.1.5 从UI插件访问驱动程序设置 756

表页面 756

16.1.4 提供DEVMODE结构附加项 756

16.1.7 增加新的属性表页面 757

16.2.1 绘制插件介绍 758

16.2 绘制插件 758

16.2.2 绘制插件实例 758

16.1.8 定制其他的打印机接口操作 758

16.2.3 绘制插件的COM接口 759

16.2.4 定制的DDI函数 761

16.2.5 定制的PDEV结构 761

16.2.7 与Pscript有关的定制绘制 762

16.2.8 与Unidrv有关的定制绘制 762

16.2.6 从绘制插件访问驱动程序设置 762

16.3 实现打印机驱动程序的COM接口 767

16.3.1 打印机驱动程序的接口标识符 768

16.3.2 创建插件 768

16.3.3 从打印机驱动程序访问插件接口 769

16.3.4 从插件访问打印机驱动程序接口 769

16.4 安装定制的驱动程序组件 770

17.1 编写打印处理器 772

17.1.1 对打印处理器的介绍 772

第17章 定制打印假脱机组件 772

17.1.2 打印处理器示例 773

17.1.3 由打印处理器定义的函数 774

17.1.4 处理一个打印作业 774

17.1.5 安装打印处理器 775

17.2.1 语言监视器 776

17.2.2 端口监视器 776

17.2 编写打印监视器 776

17.2.3 语言和端口监视器交互 777

17.2.4 由打印监视器定义的函数 778

17.2.5 初始化打印监视器 779

17.2.6 打开及关闭一个端口 780

17.2.7 打印一个打印作业 780

17.2.8 管理端口 781

17.2.9 为在群集打印服务器中使用而转 782

换打印监视器 782

17.2.10 安装打印监视器 783

17.3 编写网络打印提供者 784

17.3.1 部分打印提供者概述 784

17.3.2 支持打印机变化的通知 785

17.3.3 安装一个网络打印提供者 786

第18章 Internet打印 787

18.1 从应用程序打印到URL 787

18.2 查看打印Web页面 788

18.3.1 打印Web页面的ASP文件 790

18.3.2 定制打印机细节的Web页面 790

18.3 定制打印Web页面 790

18.3.3 安装定制的打印Web页面 793

18.4 从Web页面安装打印驱动程序 794

19.1 打印机的即插即用 795

19.2 打印机的INF文件 795

第19章 安装及配置打印机驱动程序 795

19.2.1 打印机DIRID 796

19.2.2 打印机INF文件条目 796

19.2.3 打印机INF文件的数据部分 798

19.2.4 打印机INF文件安装部分 799

19.2.5 打印机INF文件CopyFiles节 799

19.3 打印机的目录服务 800

19.3.1 打印假脱机程序对打印机目录服务的支持 800

19.2.6 打印机INF文件实例 800

19.3.2 打印机驱动程序对打印目录服务 801

的支持 801

19.4.2 在打印机安装过程中支持点 802

19.4.1 点号及打印介绍 802

号及打印 802

19.4 支持点号及打印 802

19.4.3 在打印机连接过程中支持点 804

号及打印 804

20.1 CPSUI介绍 807

20.2 CPSUI应用程序实例 807

第20章 CPSUI 807

20.4 应用程序提供的回调函数 808

20.4.1 页面创建回调函数 808

20.3 CPSUI提供的函数 808

20.4.2 页面事件回调函数 809

20.5 创建属性表页面 809

20.5.1 属性表选项 810

20.5.2 CPSUI支持的窗口控件 810

20.5.3 CPSUI提供的页面和模板 811

20.5.4 指定页面的方法 811

20.5.5 在打印机驱动程序中使用CPSUI 812

21.1 允许颜色管理 814

21.2 控制颜色管理 814

第21章 打印机颜色管理 814

21.2.1 系统控制 815

21.2.2 驱动程序控制及设备控制 815

21.2.4 对JPEG及PNG图像的颜色管理 816

21.3 定位ICC配置文件 816

21.2.3 支持CMYK颜色空间 816

21.4 安装ICC配置文件 817

第一部分 网络驱动程序 821

第1章 网络驱动程序设计指南向导 821

第五篇 网络驱动程序设计指南 821

第2章 内核模式驱动程序的网络结构 823

2.1 Windows 2000网络结构和OSI模型 823

2.2 NDIS驱动程序 824

2.2.1 NDIS微端口驱动程序 825

2.2.2 NDIS中间层驱动程序 826

2.2.3 NDIS协议驱动程序 828

2.3 TDI驱动程序 828

2.4.1 无连接环境的网络驱动程序 829

2.4.2 面向连接环境下的网络驱动程序 829

2.4 网络驱动程序环境 829

2.4.3 WAN网络驱动程序的环境 831

3.1 可移植性 833

3.2 多处理器支持 833

第3章 网络驱动程序编程要点 833

3.3 IRQL 834

3.4 同步和通知 834

3.5 包结构 836

3.6 使用共享内存 837

3.7 异步I/O和完成函数 837

4.1 NIC微端口驱动程序类型 839

第4章 NDIS NIC微端口驱动程序 839

4.2 网络接口卡支持 839

第二部分 微端口NIC驱动程序 839

4.3.1 MiniportXxx函数 841

4.3.2 与NDIS库链接 841

4.3 微端口驱动程序代码的重要特征 841

4.3.3 微端口适配器环境 842

4.3.4 VC环境 842

4.3.5 网络OID 843

4.4 示例驱动程序 843

5.1.1 初始化NDIS库和注册微端口 844

5.1 NIC微端口操作 844

驱动程序 844

第5章 NIC微端口操作和函数概述 844

5.1.2 注册网络接口卡 845

5.1.3 对查询和设置微端口信息做出响应 845

5.1.4 创建、激活、去活和删除虚连接 846

5.1.5 发送数据 846

5.1.6 指示和传递接收到的数据 848

5.1.7 指示状态 849

5.1.8 复位网络接口卡 849

5.2 微端口上边界函数 850

5.2.1 无连接微端口的上边界函数 850

5.1.9 终止一个微端口NIC驱动程序 850

5.2.2 面向连接微端口的上层函数 852

5.3 由微端口调用的NDIS函数 853

5.3.1 NDIS提供的初始化和注册函数 854

5.3.2 NDIS提供的硬件设置函数 855

5.3.3 NDIS提供的I/O端口函数 855

5.3.4 NDIS数据的与DMA相关的函数 856

5.3.5 NDIS提供的中断处理函数 857

5.3.6 NDIS提供的同步函数 858

5.3.7 NDIS提供的状态函数 859

5.3.9 NDIS为面向连接微端口提供 860

发送和接收函数 860

的发送和接收函数 860

5.3.8 NDIS为无连接微端口提供的 860

5.3.10 NDIS提供的带外数据宏 861

5.3.11 NDIS提供的包和缓存处理函数 861

5.3.12 NDIS提供的支持函数 863

5.3.13 NDIS提供的介质相关宏 866

和初始化 868

6.1 NDIS微端口驱动程序入口函数 868

第6章 NIC微端口驱动程序入口点 868

6.1.1 初始化包裹 869

6.1.2 注册微端口 869

6.2 NDIS微端口初始化 874

6.2.1 注册NIC 875

6.2.2 声明资源 877

6.2.3 注册中断 881

6.2.5 初始化轮询计时器 882

6.2.6 初始化期间的同步 882

6.2.4 注册关闭函数 882

6.3 查询微端口信息 883

6.4 减少微端口初始化时间 883

6.2.7 在初始化时处理错误 883

第7章 数据传输 886

7.1 中断处理 886

7.2 DPC处理程序 888

7.3 带外数据包 889

7.3.1 等待发送的OOB数据 890

7.3.2 接收的OOB数据 891

7.4 发送包 892

7.4.1 无连接微端口的多包传送 892

7.4.2 无连接微端口的单包发送 894

7.4.3 面向连接微端口的多包发送 896

7.4.4 发送数据前的内存同步 897

7.4.5 发送步骤 897

7.5 非串行化微端口 901

7.5.1 非串行化微端口的NDIS要求 901

7.6.1 无连接和面向连接微端口的 902

7.6 接收数据 902

多包接收 902

内部要求 902

7.5.2 非串行化微端口的驱动程序 902

7.6.2 无连接微端口的单包接收 905

7.6.3 接收数据的高速缓存因素 907

7.6.4 接收数据的步骤 907

7.7 保持统计 909

7.8 802.1p包的优先权 910

7.8.1 查询802.1p优先权支持 911

7.8.2 802.1p优先权的包支持 911

7.8.3 为发送和接收指定包的大小 912

7.8.4 缺省情况下禁止802.1p的优先 913

权支持 913

信息及NDIS支持 914

8.1 NDIS管理信息和OID 914

第8章 获取和设置WMI的微端口 914

8.2 查询微端口信息 915

8.2.1 无连接微端口的查询 915

8.2.2 面向连接微端口的查询 917

8.3.1 为无连接微端口设置信息 918

8.3.2 为面向连接微端口设置信息 918

8.3 设置微端口信息 918

8.3.3 设置微端口信息的时机 919

8.4 报告硬件状态 919

8.5.1 用WMI注册与注销NDIS微端口 920

8.5.2 OID和微端口状态的GUID映射 920

8.5 WMI的NDIS支持 920

8.5.3 支持命名VC 921

8.5.4 NDIS支持的WMI操作 921

8.5.5 向WMI注册标准微端口OID 922

8.5.6 向WMI注册的标准微端口状态 924

8.5.7 定制OID与状态指示 924

第9章 微端口的电源管理 927

9.1 电源管理的需求与可选的OID 927

9.2 网络设备电源状态 928

9.3 网络唤醒事件 929

9.3.3 魔包唤醒 930

9.3.2 网络唤醒帧 930

9.3.4 启用唤醒事件 930

9.3.1 链接改变唤醒 930

9.5 处理OID_PNP_SET_POWER 931

9.4 处理OID_PNP_QUERY_POWER 931

9.5.1 转入睡眠状态 931

9.3.5 处理唤醒事件 931

9.5.2 转入工作状态 932

9.6 早期微端口的电源管理 932

第10章 重置、停止和关闭 934

10.1 硬件重置 934

10.2 停止处理程序 935

10.3 关闭处理程序 936

第11章 广域网微端口NIC驱动程序 937

11.1 RAS体系结构 937

11.2 NDISWAN概述 939

11.3 网络卡、绑定和连接 941

11.4.1 标准广域网微端口驱动程序与 943

局域网微端口驱动程序的区别 943

11.4 广域网微端口驱动程序的实现 943

11.4.3 广域网微端口驱动程序提供 944

的附加特性 944

的服务 944

11.4.2 CoNDIS广域网微端口驱动程序 944

11.4.4 广域网微端口驱动程序的指示 953

11.5 广域网包的组帧 956

11.5.1 异步帧结构 957

11.5.2 X.25帧结构 957

11.6 标准NDIS之上的电话服务扩展 958

11.6.1 NDISTAPI概述 958

11.5.3 ISDN和Switched-56K帧结构 958

11.6.2 线路设备、地址和呼叫 959

11.6.3 设置和查询请求 959

11.6.4 保持状态信息 960

11.6.5 建立句柄 960

11.6.6 TAPI注册 961

11.6.7 TAPI初始化 962

11.6.8 打开线路 963

11.6.9 接受内入呼叫 963

11.6.10 产生TAPI呼叫 964

11.6.11 主动事件处理 965

11.6.12 Line-Up指示 966

11.6.13 关闭呼叫线路 967

11.6.14 NDISTAPI接口 969

11.7 使用支持电话服务的CoNDIS扩展 973

11.7.1 NDPROXY概述 974

11.7.2 CoNDISTAPI注册 974

11.7.3 CoNDIS TAPI初始化 975

11.7.4 建立外出呼叫 976

11.7.5 接受内入呼叫 978

11.7.6 CoNDIS TAPI关闭 981

11.7.7 语音流对呼叫管理器的要求 982

11.7.8 在面向连接NDIS上支持电话 983

服务的非广域网专用的扩展 983

第12章 任务卸载 985

12.1 查询任务卸载能力 985

12.1.1 报告NIC的校验和性能 986

12.1.2 报告NIC的IP安全性性能 987

12.1.3 报告NIC的TCP包分段性能 988

12.3 停用任务卸载能力 989

12.4 访问每数据包信息 989

12.2 启用任务卸载能力 989

12.5 卸载TCP/IP校验和任务 990

12.6 卸载IP安全任务 992

12.7 卸载大TCP包分段 995

12.8 卸载组合 997

12.9 使用注册表键值启用和禁用任务卸载 998

第13章 负载平衡和故障恢复 999

13.1 关于LBFO 999

13.3 在微端口驱动程序上实现LBFO 1000

13.3.1 初始化微端口束 1000

13.2 指定对LBFO的支持 1000

13.3.3 在主微端口失效后提升一个 1001

辅微端口 1001

13.3.2 平衡微端口驱动程序的工作量 1001

14.1 关于FFP 1002

14.1.1 使用一个NIC的FFP 1002

第14章 快速转发路径 1002

14.1.2 使用多个NIC的FFP 1003

14.1.3 IP转发 1004

14.1.4 FFP和包过滤 1005

14.2 NIDS中的FFP支持 1005

14.3 为IP转发在微端口实现FFP 1006

驱动程序 1007

15.1 带WDM下边界的微端口 1007

第15章 带有WDM低层接口的微端口 1007

15.2 注册WDM下边界的微端口函数 1008

15.3 初始化带WDM下边界的微端口 1008

15.4 发出命令与远程设备通信 1009

15.4.1 在总线上发送包 1009

15.5 WDM下边界的实现要点 1010

15.6 WDM下边界的编译标志 1010

15.4.2 在总线上接收包 1010

第16章 IrDA微端口NIC驱动程序 1012

16.1 IrDA微端口驱动程序简述 1012

16.2 IrDA体系结构 1013

16.3 IrDA协议驱动程序 1013

16.4 IrDA介质特性 1014

16.4.1 通信连接速度 1014

16.4.2 通信连接回转时间 1015

16.4.3 接收器同步 1016

16.5 IrLAP帧格式 1017

16.5.1 帧格式简述 1017

16.5.3 地址成员 1018

16.6 IrDA微端口驱动程序包编码方案 1018

16.5.2 帧信息的使用 1018

16.6.2 MIR编码 1019

16.6.3 FIR编码 1019

16.6.1 SIR编码 1019

16.8.1 非即插即用外部串行连接的 1020

16.8 即插即用 1020

SIR适配器 1020

16.7 发送和接收帧序列 1020

适配器 1021

16.8.3 即插即用外部串行连接的SIR 1021

16.8.4 即插即用的内部SIR适配器 1021

16.8.2 非即插即用的内部SIR适配器或者错误地暴露为串口的内部SIR适配器 1021

适配器 1022

16.8.6 即插即用总线连接的FIR适配器 1022

16.8.5 非即插即用总线连接的FIR 1022

和TDI驱动程序 1025

第17章 NDIS中间层驱动程序 1025

第三部分 NDIS中间层驱动程序 1025

17.1 中间层驱动程序的DriverEntry函数 1027

17.2 中间层驱动程序的动态绑定 1033

17.2.1 打开中间层驱动程序下层的 1034

适配器 1034

17.2.2 微端口初始化 1035

17.2.3 中间层驱动程序查询和设置操作 1036

17.2.4 作为面向连接客户程序注册中 1038

间层驱动程序 1038

17.3 中间层驱动程序数据包管理 1039

17.4 中间层驱动程序的限制 1042

17.5 中间层驱动程序接收数据 1042

17.5.1 下边界面向无连接的中间层 1043

驱动程序接收数据 1043

17.5.2 下边界面向连接的中间层 1045

驱动程序接收数据 1045

17.5.3 向高层驱动程序指示接收数据包 1047

17.6 通过中间层驱动程序传输数据包 1047

和PM事件 1050

17.7.1 处理OID_PNP_XXX查询和设置 1050

17.7 处理中间层驱动程序的PnP事件 1050

17.7.2 中间层驱动程序ProtocolPnP 1051

Event处理程序的实现 1051

17.7.3 处理电源设置请求 1052

17.8 中间层驱动程序复位操作 1053

17.9 中间层驱动程序拆除绑定操作 1054

17.10 中间层驱动程序状态指示 1055

第18章 NDIS协议驱动程序 1056

18.1 协议DriverEntry及其初始化 1057

18.1.1 注册NDIS协议驱动程序 1057

18.1.2 在协议驱动程序下打开适配器 1060

18.1.3 协议驱动程序查询和设置操作 1061

18.1.4 作为呼叫管理器或者面向连 1063

接客户进行注册 1063

18.2 协议驱动程序数据包管理 1066

18.3 协议驱动程序的动态绑定 1068

18.4 协议驱动程序接收数据 1068

18.4.1 面向无连接的协议驱动程序接 1069

收数据 1069

18.4.2 面向连接协议驱动程序接收数据 1072

18.5.1 通过面向无连接协议驱动程 1073

序发送数据包 1073

18.5 发送协议驱动程序创建的数据包 1073

18.5.2 通过面向连接协议驱动程序 1075

发送数据包 1075

电源管理事件 1077

18.7 协议驱动程序复位操作 1077

18.6 在协议驱动程序中处理PnP事件和 1077

18.8 协议驱动程序拆除绑定操作 1078

18.9 协议驱动程序状态指示 1079

第19章 TDI传输器及其客户 1080

19.1 传输驱动程序接口(TDI) 1080

19.2 TDI设备对象 1082

19.3 TDI文件对象 1083

19.3.1 代表传输地址的文件对象 1084

19.3.2 代表连接端点的文件对象 1085

19.3.3 代表控制信道的文件对象 1085

19.4 TDI传输驱动程序例程 1086

19.5 TDI内核模式客户交互 1086

19.6 TDI请求及事件 1087

第20章 TDI例程、宏和回调 1089

20.1 TDI驱动程序初始化 1089

20.1.1 注册TDI传输驱动程序 1090

20.1.2 卸载和注销TDI传输驱动程序 1091

20.2 TDI驱动程序调度例程 1091

20.3 TDIIOCTL请求 1092

20.4 TDI客户回调 1093

20.5 TDI库函数和宏 1094

第21章 TDI操作 1097

21.1 打开传输地址 1097

21.2 打开连接端点 1099

21.3 打包并提交IOCTL请求 1099

21.4 设置和查询信息 1100

21.5 建立端端连接 1101

21.6 发送和接收面向连接数据 1103

21.7 发送和接收无连接数据 1106

21.8 面向连接和面向无连接传输 1108

21.9 请求传输相关操作 1109

21.10 接收错误通知 1109

21.11 断开端端连接 1110

21.12 关闭连接端点 1110

21.13 关闭传输地址和控制信道 1111

辅助程序的DLL 1112

22.1 Windows Sockets Helper DLL结构 1112

第22章 Windows Sockets的传输 1112

22.2 用WSH DLL通信 1113

22.3 配置WSH DLL 1113

22.5 用WSH DLL支持连接和断开 1114

连接数据 1114

22.4 WSH DLL同步 1114

22.5.1 客户应用程序和连接数据 1115

22.5.2 服务器应用程序和连接数据 1115

22.5.3 断开连接数据 1116

22.6 WSH DLL函数摘要 1116

接口标准 1119

第23章 面向连接的网络驱动程序 1119

23.1 面向连接环境 1119

第四部分 面向连接的网络驱动程序接口标准 1119

23.2 使用AF、VC、SAP和会话方 1120

23.2.1 地址族 1121

23.2.2 虚连接 1121

23.2.4 会话方 1122

23.3 服务质量 1122

23.2.3 SAP 1122

23.4.2 对NdisXxx函数调用的不同 1123

23.4.1 初始化的不同 1123

23.4.3 虚连接的不同 1123

23.4 MCM和呼叫管理器有何不同 1123

23.6 面向连接操作 1124

23.6.1 面向连接操作总结 1124

23.5 面向连接的时间特性 1124

23.6.2 地址族和SAP上的操作 1127

23.6.3 VC上的操作 1132

23.6.4 创建呼叫 1138

23.6.5 改变活动VC的QoS 1142

23.6.6 增加和删除会话方 1146

23.6.7 发送并接收数据 1150

23.6.8 断开呼叫 1152

23.6.9 获取并设置信息 1155

23.6.10 重置 1157

第24章 安装网络组件 1159

24.1 用于安装网络组件的组件和文件 1159

第五部分 安装网络组件 1159

24.2.1 网络INF文件名的约定 1160

24.2.2 网络INF文件的Version节 1160

24.2 创建网络INF文件 1160

24.2.3 网络INF文件的Models节 1161

24.2.4 INF文件的DDInstall节 1162

24.2.6 网络INF文件的ControlFlags节 1164

24.2.7 网络INF文件的add-registry-sections 1164

24.2.5 网络INF文件的Remove节 1164

24.2.8 DDInstall.Service节 1176

24.2.9 NetworkProvider和PrintProvider节 1177

24.2.10 Winsock节 1179

24.2.11 网络组件安装需求总结 1180

25.1 关于通知对象 1188

25.1.1 通知对象图 1188

第25章 网络组件的通知对象 1188

25.1.2 通知类型 1189

25.1.3 网络组件的安装 1190

25.1.4 删除网络组件 1190

25.1.5 升级网络组件 1191

25.1.6 显示并改变属性 1191

25.2.1 装载通知对象DLL和类对象 1192

25.2 创建通知对象 1192

25.2.2 定义通知对象 1192

25.1.7 网络配置 1192

25.2.3 创建并初始化通知对象实例 1193

25.2.4 安装、升级和删除组件 1194

25.2.5 为组件生成属性页 1194

25.2.6 设置环境来显示属性 1195

25.2.8 将组件变化加入注册表 1196

25.2.9 配置组件驱动程序 1196

25.2.7 评价网络配置的变化 1196

2.2 终端用户I/O请求和Windows 2000