| 作者 |
| Mickey Williams著 |
| 丛书名 |
| 软件开发技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9787111076322 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 本书是Mickey Williams 所著的一本讲述Winodws 2000 编程的专著,全书共分为五个部分:Windows 2000 核心技术、用户交互/桌面、COM 和ActiveX、COM+以及分布式Windows 2000 服务,详细介绍了Windows 2000 所实现的各种服务,以及它所提供的API 函数。本书结构严谨,内容全面。作者提供了大量的实例,使读者能够轻松地理解复杂的概念及原理。所以,本书是学习Windows 2000 应用程序开发的一本难得的入门教材,同时也是Windows NT 编程人员必不可少的一本参考资料。 |
| 目录 |
| 目 录 译者序 前言 第一部分 Windows 2000 核心技术 第1章 Windows DNA 概述 1 1.1 Windows 和Windows NT 的历史 1 1.2 Windows DNA 剖析 2 1.3 Windows DNA 的结构 3 1.3.1 COM 4 1.3.2 表示层 4 1.3.3 防火墙层 6 1.3.4 业务逻辑层 7 1.3.5 数据层 10 1.4 小结 11 第2章 虚拟内存和内存管理 12 2.1 使用虚拟内存 12 2.2 使用虚拟内存的时机 13 2.2.1 保留一定的虚拟内存 14 2.2.2 提交一个虚拟内存页面 15 2.2.3 锁定虚拟内存页面 18 2.2.4 释放虚拟内存页面 19 2.2.5 为其他进程分配内存 19 2.3 使用虚拟内存的例子 19 2.4 Windows 2000 堆函数 27 2.4.1 Windows 2000 下的堆管理 27 2.4.2 在C++ 类中使用私有堆 28 2.5 小结 33 第3章 线程和进程 34 3.1 进程和线程 34 3.2 管理进程 36 3.2.1 使用CreateProcess 函数 36 3.2.2 结束进程 38 3.3 管理线程 38 3.3.1 创建线程 38 3.3.2 结束线程 42 3.3.3 取出并改变线程的优先级 42 3.3.4 线程局部存储 43 3.3.5 判断线程的标识符 44 3.3.6 使用线程相似性 45 3.3.7 使多个线程合作 47 3.3.8 何时应创建线程 49 3.3.9 何时不应创建线程 49 3.4 同步 50 3.4.1 使用Win32互锁操作 50 3.4.2 临界区 52 3.4.3 管理事件 54 3.4.4 信号灯与互斥 59 3.5 信号量 61 3.5.1 信号量和等待函数 62 3.5.2 信号量应用程序 63 3.5.3 创建信号量 64 3.5.4 返回信号量控制的资源 64 3.6 在应用程序中使用信号量和临 界区 64 3.7 使用作业对象 70 3.7.1 控制作业对象属性 71 3.7.2 作业对象实例 71 3.8 小结 75 第4章 文件 76 4.1 使用Windows 2000文件系统 76 4.2 执行通用文件操作 76 4.2.1 收集卷信息 76 4.2.2 文件系统标志 77 4.2.3 例子 78 4.2.4 打开、关闭和删除文件 80 4.2.5 写文件 82 4.2.6 读文件 83 4.3 查找文件 85 4.3.1 使用FindFirstFile、FindNextFile 和FindClose 85 4.3.2 即将面世的FindFirstFileEx 88 4.3.3 使用FILETIME 结构 89 4.4 执行其他文件操作 91 4.4.1 使用CopyFile 91 4.4.2 使用MoveFile 91 4.4.3 使用SetFilePointer 92 4.4.4 使用GetFileSize 93 4.5 使用异步输入输出 93 4.5.1 使用重叠的输入和输出 94 4.5.2 使用文件完成例程 97 4.5.3 使用文件完成例程的例子 98 4.6 利用加密文件系统 104 4.7 使用文件通知函数 108 4.8 小结 112 第5章 结构化异常处理 113 5.1 异常处理的基础知识 113 5.2 SEH工作原理 114 5.3 使用终止处理程序 114 5.3.1 使用_ _leave 来离开_ _try 块 116 5.3.2 使用正常和反常终止 117 5.4 使用异常处理程序 117 5.4.1 使用异常过滤器 118 5.4.2 处理浮点异常 121 5.5 C++ 异常处理 122 5.5.1 使用异常来检测错误 122 5.5.2 在错误产生后使用异常清除 123 5.5.3 使用标准异常库 124 5.5.4 使用运行异常 125 5.5.5 使用逻辑异常 126 5.5.6 检测构造时的错误 127 5.6 把Win32 SEH 与C++ 异常处理集成 起来 128 5.7 小结 129 第6章 动态链接库 130 6.1 理解库 130 6.1.1 静态链接库 131 6.1.2 动态链接库 131 6.1.3 使用DLL 的好处 132 6.1.4 使用DLL 的不利之处 132 6.2 创建和使用动态链接库 132 6.2.1 DLL 初始化 133 6.2.2 导出和导入DLL 函数和数据 134 6.2.3 在装入期间装入DLL 137 6.2.4 在运行时装入DLL 137 6.2.5 DLL 版本控制 138 6.2.6 创建DLL 共享内存 139 6.2.7 简单的DLL 实例 141 6.2.8 使用C++ 和DLL 144 6.2.9 使用MFC 和DLL 146 6.3 通用替换程序 152 6.3.1 通用替换程序的结构 153 6.3.2 通用替换程序函数 154 6.3.3 通用替换程序实例 155 6.3.4 通用替换程序的调试 163 6.4 小结 163 第7章 分布式安全性 164 7.1 Windows 2000 安全性概述 164 7.2 基本安全性数据结构 165 7.2.1 进程和线程安全性令牌 165 7.2.2 安全标识符 167 7.2.3 ACE、DACL 和SACL 结构 171 7.2.4 判断ACL 所需的大小 172 7.2.5 给DACL 添加允许访问的ACE 173 7.2.6 安全描述符 174 7.2.7 获取安全描述符 176 7.2.8 使用安全属性结构 178 7.3 基于委托的访问控制 178 7.3.1 TRUSTEE 结构 179 7.3.2 ACTRL_ACCESS_ENTRY 结构 181 7.3.3 ACTRL_ACCESS_ENTRY_LIST 结构 182 7.3.4 ACTRL_PROPERTY_ENTRY 结构 183 7.3.5 ACTRL_ACCESS 结构 183 7.4 模仿客户程序 187 7.5 小结 188 第8章 Windows 2000 调试技术 189 8.1 Windows 调试策略 189 8.2 使代码易于调试 189 8.2.1 Windows 2000 的调试支持 190 8.2.2 MFC调试支持 190 8.3 Windows 2000 调试技术概述 192 8.3.1 符号调试信息 192 8.3.2 Microsoft 调试工具 192 8.3.3 第三方调试工具 192 8.4 Visual C++ 集成的调试工具 193 8.4.1 Visual C++ 调试工具的基本知识 193 8.4.2 窗口中的内容 195 8.4.3 Visual C++ 调试工具技巧 196 8.5 Windows 调试工具WINDBG 198 8.6 使用SoftIce 调试程序 198 8.7 使用Dr.Watson 198 8.8 使用BugTrapper 201 8.9 第三方工具的来源 201 8.9.1 Compuware NuMega Lab 201 8.9.2 Mutek Solutions 有限公司 201 8.9.3 Rational 202 8.10 小结 202 第9章 Windows 2000 服务 203 9.1 服务 203 9.1.1 与Windows 2000 服务相交互 203 9.1.2 Windows 2000 服务和系统安全 205 9.2 编程实现Windows 2000 服务 206 9.2.1 用服务状态更新服务控制管理器 206 9.2.2 Windows 2000 服务的生存周期 208 9.2.3 停止Windows 2000 服务 212 9.2.4 往Windows 2000 事件日志中写 数据 213 9.3 Windows 2000 服务的例子 215 9.4 小结 226 第10章 控制Windows 2000 服务 227 10.1 编写服务控制程序 227 10.1.1 使用服务控制管理器注册服务 227 10.1.2 取消注册服务 230 10.1.3 自动重启出错的服务 232 10.2 编写控制面板小程序 233 10.2.1 控制面板小程序接口 233 10.2.2 CtlFileSpy:FileSpy 的控制面板 小程序 235 10.3 小结 243 第二部分 用户交互 / 桌面 第11章 高级图形设备接口编程 245 11.1 GDI 基础 245 11.2 设备描述表 246 11.2.1 GDI 映射模式 247 11.2.2 GDI 对象及其用法 247 11.3 位图 248 11.3.1 DDB 与DIB 248 11.3.2 16 色DIB 251 11.3.3 256 色DIB 252 11.4 DIB 例子 253 11.4.1 CDIBitmap 类 253 11.4.2 CBmpPalette 类 259 11.4.3 CDibDoc 类的修改 261 11.4.4 主窗体类的修改 263 11.4.5 CDibView 类的修改 264 11.5 路径 266 11.6 元文件 269 11.7 元文件的例子 269 11.7.1 CMetaView 类声明的修改 270 11.7.2 CMetaView 类析构函数的修改 270 11.7.3 对CMetaView: OnInitialUpdate 的修改 270 11.7.4 鼠标左击 271 11.7.5 对CMetaView: OnDraw 的修改 272 11.8 小结 273 第12章 所有者作图和定制作图 274 12.1 使用所有者作图控件 274 12.2 实现所有者作图控件 275 12.2.1 处理WM_DRAWITEM消息 275 12.2.2 处理WM_MEASUREITEM 消息 276 12.2.3 处理WM_COMPAREITEM消息 276 12.2.4 处理WM_DELETEITEM 消息 277 12.3 所有者作图实例:OwnDraw 277 12.3.1 创建CListItem结构 278 12.3.2 处理所有者作图消息 278 12.3.3 向列表框中加入项目 278 12.3.4 处理WM_MEASUREITEM消息 279 12.3.5 处理WM_DRAWITEM消息 279 12.3.6 处理WM_DELETEITEM消息 280 12.4 使用定制作图 281 12.4.1 定制作图所使用的数据结构 281 12.4.2 CustDraw:使用MFC的定制作 图实例 285 12.5 小结 291 第三部分 COM 和Activex 第13章 COM 和OLE 293 13.1 COM 和OLE 概述 293 13.2 常用COM 和OLE 技术 293 13.2.1 复合文档 293 13.2.2 可视化编辑 295 13.2.3 自动化 296 13.2.4 OLE 数据传输 296 13.2.5 拖放 296 13.2.6 与其他应用程序集成 296 13.3 使用COM 和OLE 编程 296 13.3.1 使用COM 接口 297 13.3.2 标识COM 接口和对象 297 13.3.3 处理GUID 298 13.3.4 处理版本问题 299 13.3.5 使用IUnknown 接口 299 13.3.6 创建对象 302 13.4 COM 组件的一个例子 305 13.4.1 使用Shell 扩展机制 305 13.4.2 理解快捷菜单扩展 306 13.4.3 创建实例 306 13.5 小结 319 第14章 自动化 320 14.1 创建使用自动化的可编程应用程序 320 14.2 IDispatch 接口 320 14.2.1 IDispatch 使用的数据类型 320 14.2.2 IDispatch 中的函数 325 14.2.3 IDispatch 接口与虚函数表 326 14.3 创建使用MFC 的自动化服务程序 327 14.3.1 修改自动化选项 328 14.3.2 修改文档类 328 14.3.3 为AutoBub 创建对话框 330 14.3.4 为AutoBub 画泡泡对象 332 14.3.5 往AutoBub 中加入自动化支持 332 14.4 使用Visual Basic 创建自动化控制 程序 335 14.5 在VBScript 中使用自动化 337 14.6 小结 339 第15章 OLE 拖放 340 15.1 OLE 剪贴板 340 15.1.1 使用FORMATETC 和 STGMEDIUM 结构 340 15.1.2 处理FORMATETC 结构 341 15.1.3 使用DVTARGETDEVICE 结构 342 15.1.4 使用STGMEDIUM 结构 343 15.1.5 使用IDataObject 接口 344 15.2 使用OLE 拖放 345 15.2.1 OLE 拖放来源 346 15.2.2 OLE 拖放目标 346 15.3 拖放实例 346 15.4 小结 354 第16章 COM 线程化模型 355 16.1 COM 线程化方案 355 16.1.1 进程内COM 服务程序 355 16.1.2 进程外服务程序 356 16.1.3 管理进程间的内存 357 16.1.4 使用住所中的COM 359 16.2 STA 和MTA 360 16.2.1 为每个线程选择一个住所 360 16.2.2 线程的最佳住所 361 16.2.3 为COM 对象选择住所 361 16.2.4 在客户程序和COM 对象间不匹配 的住所 362 16.3 在COM 住所间调度 367 16.3.1 共享接口指针的错误方法 368 16.3.2 共享接口指针的正确方法 370 16.4 小结 373 第17章 COM 对象 374 17.1 使用IDL 374 17.1.1 深入MIDL 属性 376 17.1.2 编译MIDL 源文件 376 17.1.3 使用类型库 377 17.1.4 使用IDL 中的结构 377 17.1.5 使用IDL 中的枚举类型 378 17.1.6 指针和IDL 378 17.1.7 使用IDL 中的方向属性 380 17.2 使用ATL 创建定制组件 380 17.2.1 常用的ATL 类 380 17.2.2 ATL COM 接口映射 381 17.2.3 使用ATL 向导 381 17.2.4 将代理/存根代码合并到DLL 中 385 17.2.5 一个定制COM 对象的示例 385 17.3 使用moniker 395 17.3.1 系统moniker 的示例 395 17.3.2 创建moniker 实例 395 17.3.3 将moniker 转换为文本字符串 396 17.3.4 根据显示名创建moniker 398 17.4 连接点 398 17.5 定制调度 400 17.5.1 深入定制调度 400 17.5.2 深入按值调度 402 17.5.3 实现定制代理 402 17.5.4 在服务器上实现Imarshal 407 17.5.5 比较使用定制代理和标准代理 的性能 410 17.6 小结 410 第18章 ActiveX 控件 411 18.1 什么是ActiveX 控件 411 18.2 ActiveX 控件接口 411 18.3 ActiveX 控件的属性、事件和 方法 412 18.3.1 属性 412 18.3.2 事件 413 18.3.3 方法 413 18.4 一个ActiveX 控件示例 413 18.4.1 创建工程 414 18.4.2 绘制控件 414 18.4.3 定义AxEdit 的属性 415 18.4.4 字符输入处理 417 18.4.5 修改控件的位图 419 18.5 测试ActiveX 控件 419 18.5.1 选择控件的测试容器 419 18.5.2 使用TSTCON32 测试容器 419 18.5.3 测试属性 420 18.6 使用ATL 创建ActiveX 控件 421 18.6.1 使用ATL 实现 stock 属性 421 18.6.2 使用ATL 实现custom 属性 422 18.6.3 通过ATL 使用ambient 属性 424 18.6.4 在ATL工程中实现事件 424 18.6.5 添加消息和事件处理程序 426 18.7 用ATL 构建的ActiveX 控件 427 18.7.1 PopButton 的基本设计思路 427 18.7.2 创建PopBtn 工程 429 18.7.3 用Visual Basic 测试PopButton 控件 443 18.8 小结 444 第19章 异步COM 445 19.1 COM 中的同步方法和异步方法 445 19.2 Windows 2000 中对异步方法的 支持 446 19.2.1 IDL 中的异步支持 446 19.2.2 Windows 2000 中其他新的异步 组件 447 19.2.3 使用Fire 和Forget 模式 452 19.3 一个异步COM 的示例 452 19.3.1 IShop 接口 452 19.3.2 AsyncTest 工程 453 19.3.3 一个同步测试客户 455 19.3.4 IShop 接口的第二版 457 19.3.5 一个异步测试客户 458 19.4 小结 461 第20章 DCOM 462 20.1 位置透明性 462 20.1.1 创建远程对象的实例 463 20.1.2 使用IMultiQI 接口 466 20.1.3 确定外部引用是否有效 467 20.2 DCOM中的安全性 467 20.2.1 安全性的类型 467 20.2.2 深入调用安全性 468 20.2.3 深入模仿与伪装 468 20.2.4 设置计算机的安全级别 469 20.2.5 设置进程的安全属性 471 20.2.6 深入安全模块 482 20.2.7 设置接口的客户端安全属性 483 20.2.8 管理服务器端的安全性 485 20.3 使用DCOM 配置程序 486 20.3.1 使用DCOM Config 设置系统 端属性 486 20.3.2 使用DCOM Config设置特定 AppID 的属性 486 20.4 小结 487 第四部分 COM+ 第21章 COM+服务简介 489 21.1 事务简介 489 21.1.1 ACID:事务处理的四大特性 490 21.1.2 事务的分类 491 21.1.3 两阶段提交协议 492 21.2 深入COM+ 内的事务 493 21.3 构建一个可支持事务处理的COM+ 组件 495 21.3.1 使用Visual Basic 构建COM 对象 495 21.3.2 启示 509 21.3.3 向COM+ 应用程序中添加组件 510 21.4 小结 518 第22章 构建COM+ 服务组件 519 22.1 好的Component Service 组件 519 22.1.1 生命周期/无状态 519 22.1.2 无状态对象 521 22.1.3 活动 522 22.2 编写事务组件 523 22.2.1 创建通用事务组件 523 22.2.2 使用Visual C++ 创建事务性 COM+对象 524 22.2.3 使用Visual Basic 创建事务性 COM+对象 531 22.3 使用COM 编译器支持类 533 22.3.1 TLH和TLI:检查输出 533 22.3.2 COM编译器命令属性 536 22.3.3 使用com_error 产生和捕捉 错误 536 22.3.4 使用任何数据:_variant_t 537 22.3.5 使用BSTR:_bstr_t 538 22.4 使用多个COM+ 对象 538 22.4.1 组合COM+ 对象的事务生命 周期 538 22.4.2 有多个对象参与的事务的输出 540 22.4.3 错误处理 541 22.4.4 传递参数和接口 541 22.5 小结 543 第23章 使用IIS 与COM+ 544 23.1 Web 应用程序基础 544 23.1.1 ASP 概览 544 23.1.2 脚本示例 545 23.1.3 ASP 应用程序 545 23.1.4 内置的ASP 对象 549 23.2 构建Web应用程序 549 23.3 实现方法 552 23.3.1 对HTML 窗体的处理 552 23.3.2 管理cookie 554 23.3.3 创建cookie 554 23.3.4 ServerVariables 集合 556 23.3.5 对ASP 错误的处理 557 23.3.6 定义全局关键字 558 23.3.7 强制次序 560 23.3.8 用JavaScript 简化重定向过程 563 23.3.9 管理对象的更为简单的方法 565 23.3.10 使用二进制数据 565 23.3.11 编写动态代码 567 23.3.12 动态地调整内容的大小 567 23.3.13 数据验证 569 23.3.14 下载文件 571 23.3.15 发送email 572 23.3.16 浏览器的功能 572 23.4 组件开发 576 23.4.1 一个简单的ASP 组件 576 23.4.2 内容更丰富的ASP 组件 578 23.5 事务性的ASP 页 582 23.6 小结 584 第24章 使用COM+ 驻留内存数据库 585 24.1 驻留内存数据库 585 24.2 一个简单的示例 588 24.2.1 创建IMDB 589 24.2.2 创建IMDB 数据源 590 24.2.3 引用资源表 590 24.3 IMDB 的一些细节问题 590 24.3.1 在OLE DB 级支持哪些接口 590 24.3.2 特定条件是如何与OLE DB 使用 者模板相关的 591 24.3.3 ADO 使用的细节 596 24.4 小结 597 第25章 高级COM+ 服务 598 25.1 通过对象共享和负载平衡获得可扩 展性 598 25.1.1 实现IObjectControl 598 25.1.2 动态负载平衡 600 25.2 一些高级的事务概念 601 25.2.1 避免死锁和阻塞 601 25.2.2 IObjectConstruct 接口 601 25.2.3 特定情况下的事务控制 602 25.2.4 由客户控制事务 604 25.3 排队组件 606 25.3.1 什么是排队组件 607 25.3.2 排队组件是如何工作的 608 25.3.3 编写排队组件 608 25.3.4 使用排队组件发送返回消息 609 25.4 异步分发信息 610 25.4.1 出版者/订户结构简介 610 25.4.2 构建出版者/订户工程 611 25.5 小结 624 第五部分 分布式Windows 2000 服务 第26章 管道 625 26.1 管道的类型 625 26.2 无名管道 625 26.2.1 创建和关闭无名管道 626 26.2.2 管道的读和写 626 26.2.3 使用无名管道与另一进程通信 627 26.2.4 使用无名管道的一个示例 627 26.3 有名管道 631 26.3.1 有名管道的类型 631 26.3.2 创建和关闭有名管道 632 26.3.3 连接和使用有名管道 633 26.3.4 使用有名管道的示例 635 26.4 小结 642 第27章 活动 643 27.1 活动概览 643 27.1.1 名字空间组织 643 27.1.2 树和森林 645 27.2 使用ADSI 管理活动 645 27.2.1 在Visual Basic 和Visual C++ 中 使用ADSI 646 27.2.2 ADSI 绑定字符串 646 27.2.3 ADSI 辅助函数 647 27.2.4 无服务的绑定和ADSI 649 27.2.5 ADSI 所提供的COM 接口 651 27.3 其他资源 657 27.4 小结 658 第28章 MSMQ 659 28.1 Microsoft Message Queue Server 简介 659 28.1.1 MSMQ 和有名管道 659 28.1.2 安装MSMQ 660 28.1.3 消息队列的类型 660 28.1.4 公用队列和专用队列 661 28.2 MSMQ 对象属性 661 28.2.1 队列属性 662 28.2.2 消息属性 663 28.2.3 机器属性 664 28.2.4 内存分配 664 28.3 使用Win32 API 创建和管理消息 队列 665 28.3.1 创建消息队列 666 28.3.2 打开已有的队列 670 28.3.3 向消息队列发送消息 671 28.3.4 从消息队列中接收消息 675 28.3.5 关闭消息队列句柄 679 28.3.6 删除消息队列 679 28.4 用Visual Basic 编写的消息队列客户 程序 681 28.5 小结 684 第29章 集群服务器 685 29.1 集群服务器的结构 685 29.1.1 集群服务器的硬件 685 29.1.2 MSCS 软件组件 686 29.1.3 集群的启动和恢复 688 29.2 集群API 688 29.2.1 集群对象管理API 688 29.2.2 资源DLL API 693 29.2.3 集群管理扩展API 696 29.3 一个可感知集群的示例 697 29.3.1 ClusterQuote 工程 697 29.3.2 QuoteClient 工程 698 29.3.3 High Availability Quotes 集群资源 类型 698 29.4 小结 700 |