本书是Mickey Winlliams所著的一本讲述Windows 2000编程的专著,全书共分为五个部分:Windows 2000核心技术、用户交互/桌面、COM和ActiveX、COM+以及分布式Windows 2000服务,详细介绍了Windows 2000所实现的各种服务,以及它所提供的API函数。本书结构严谨,内容全面。作者提供了大量的实例,使读者能够轻松地理解复杂的概念及原理。所以,本书是学习Windows 2000应用程序开发的一本难得的入门教材,同时也是Windows NT编程人员必不可少的一本以参考资料。
译者序\r\n前言\r\n\r\n第一部分 Windows 2000核心技术\r\n\r\n第1章 Windows DNA概述\r\n\r\n1.1 Windows和Windows NT的历史\r\n1.2 Windows DNA剖析\r\n1.3 Windows DNA的结构\r\n1.3.1 COM\r\n1.3.2 表示层\r\n1.3.3 防火墙层\r\n1.3.4 业务逻辑层\r\n1.3.5 数据层\r\n1.4 小结\r\n\r\n第2章 虚拟内存和内存管理\r\n\r\n2.1 使用虚拟内存\r\n2.2 使用虚拟内存的时机\r\n2.2.1 保留一定的虚拟内存\r\n2.2.2 提交一个虚拟内存页面\r\n2.2.3 锁定虚拟内存页面\r\n2.2.4 释放虚拟内存页面\r\n2.2.5 为其他进程分配内存\r\n2.3 使用虚拟内存的例子\r\n2.4 Windows 2000堆函数\r\n2.4.1 Windows 2000下的堆管理\r\n2.4.2 在C++类中使用私有堆\r\n2.5 小结\r\n\r\n第3章 线程和进程\r\n\r\n3.1 进程和线程\r\n3.2 管理进程\r\n3.2.1 使用CreateProcess函数\r\n3.2.2 结束进程\r\n3.3 管理线程\r\n3.3.1 创建线程\r\n3.3.2 结束线程\r\n3.3.3 取出并改变线程的优先级\r\n3.3.4 线程局部存储\r\n3.3.5 判断线程的标识符\r\n3.3.6 使用线程相似性\r\n3.3.7 使多个线程合作\r\n3.3.8 何时应创建线程\r\n3.3.9 何时不应创建线程\r\n3.4 同步\r\n3.4.1 使用Win 32互锁操作\r\n3.4.2 临界区\r\n3.4.3 管理事件\r\n3.4.4 信号灯与互斥\r\n3.5 信号量\r\n3.5.1 信号量和等待函数\r\n3.5.2 信号量应用程序\r\n3.5.3 创建信号量\r\n3.5.4 返回信号量控制的资源\r\n3.6 在应用程序中使用信号量和临界区\r\n3.7 使用作业对象\r\n3.7.1 控制作业对象属性\r\n3.7.2 作业对象实例\r\n3.8 小结\r\n\r\n第4章 文件\r\n\r\n4.1 使用Windows 2000文件系统\r\n4.2 执行通用文件操作\r\n4.2.1 收集卷信息\r\n4.2.2 文件系统标志\r\n4.2.3 例子\r\n4.2.4 打开、关闭和删除文件\r\n4.2.5 写文件\r\n4.2.6 读文件\r\n4.3 查找文件\r\n4.3.1 使用FindFirstFile、FindNextFile和FindClose\r\n4.3.2 即将面世的FindFirstFileEx\r\n4.3.3 使用FILETIME结构\r\n4.4 执行其他文件操作\r\n4.4.1 使用CopyFile\r\n4.4.2 使用MoveFile\r\n4.4.3 使用SetFilePointer\r\n4.4.4 使用GetFileSize\r\n4.5 使用异步输入输出\r\n4.5.1 使用重叠的输入和输出\r\n4.5.2 使用文件完成例程\r\n4.5.3 使用文件完成例程的例子\r\n4.6 利用加密文件系统\r\n4.7 使用文件通知函数\r\n4.8 小结\r\n\r\n第5章 结构化异常处理\r\n\r\n5.1 异常处理的基础知识\r\n5.2 SEH工作原理\r\n5.3 使用终止处理程序\r\n5.3.1 使用_leave来离开__try块\r\n5.3.2 使用正常和反常终止\r\n5.4 使用异常处理程序\r\n5.4.1 使用异常过滤器\r\n5.4.2 处理浮点异常\r\n5.5 C++异常处理\r\n5.5.1 使用异常来检测错误\r\n5.5.2 在错误产生后使用异常清除\r\n5.5.3 使用标准异常库\r\n5.5.4 使用运行异常\r\n5.5.5 使用逻辑异常\r\n5.5.6 检测构造时的错误\r\n5.6 把Win32 SEH与C++异常处理集成起来\r\n5.7 小结\r\n\r\n第6章 动态链接库\r\n\r\n6.1 理解库\r\n6.1.1 静态链接库\r\n6.1.2 动态链接库\r\n6.1.3 使用DLL的好处\r\n6.1.4 使用DLL的不利之处\r\n6.2 创建和使用动态链接库\r\n6.2.1 DLL初始化\r\n6.2.2 导出和导入DLL函数和数据\r\n6.2.3 在装入期间装入DLL\r\n6.2.4 在运行时装入DLL\r\n6.2.5 DLL版本控制\r\n6.2.6 创建DLL共享内存\r\n6.2.7 简单的DLL实例\r\n6.2.8 C++和DLL\r\n6.2.9 使用MFC和DLL\r\n6.3 通用替换程序\r\n6.3.1 通用替换程序的结构\r\n6.3.2 通用替换程序的函数\r\n6.3.3 通用替换程序实例\r\n6.3.4 通用替换程序的调试\r\n6.4 小结\r\n\r\n第7章 分布式安全性\r\n\r\n7.1 Windows 2000安全性概述\r\n7.2 基本安全性数据结构\r\n7.2.1 进程和线程安全令牌\r\n7.2.2 安全标识符\r\n7.2.3 判断ACL所需的大小\r\n7.2.4 给DACL添加允许访问的ACE\r\n7.2.5 安全描述符\r\n7.2.6 ACE、DACL和SACL结构\r\n7.2.7 获取安全描述符\r\n7.2.8 使用安全属性结构\r\n7.3 基于委托的访问控制\r\n7.3.1 TRUSTEE结构\r\n7.3.2 ACTRL-ACCESS-ENTRY结构\r\n7.3.3 ACTRL-ACCESS-ENTRY-LIST结构\r\n7.3.4 ACTRL-PROPERTY-ENTRY结构\r\n7.3.5 ACTRL-ACCESS结构\r\n7.4 模仿客户程序\r\n7.5 小结\r\n\r\n第8章 Windows 2000调试技术\r\n\r\n8.1 Windows调试策略\r\n8.2 使代码易于调试\r\n8.2.1 Windows 2000的调试支持\r\n8.2.2 MFC调试支持\r\n8.3 Windows 2000调试技术概述\r\n8.3.1 符号调试信息\r\n8.3.2 Microsoft调试工具\r\n8.3.3 第三方调试工具\r\n8.4 Visual C++集成的调试工具\r\n8.4.1 Visual C++调试工具的基本知识\r\n8.4.2 窗口中的内容\r\n8.4.3 Visual C++调试工具技巧\r\n8.5 Windows调试工具WINDBG\r\n8.6 使用SoftIce调试程序\r\n8.7 使用Dr.Watson\r\n8.8 使用BugTrapper\r\n8.9 第三方工具的来源\r\n8.9.1 Copuware NuMega Lab\r\n8.9.2 Mutek Solutions有限公司\r\n8.9.3 Rational\r\n8.10 小结\r\n\r\n第9章 Windows 2000服务\r\n\r\n9.1 服务\r\n9.1.1 与Windows 2000服务相交互\r\n9.1.2 Windows 2000服务和系统安全\r\n9.2 编程实现Windows 2000服务\r\n9.2.1 用服务状态更新服务控制管理器\r\n9.2.2 停止Windows 2000服务\r\n9.2.3 Windows 2000服务的生存周期\r\n9.2.4 往Windows 2000事件日志中写数据\r\n9.3 Windows 2000服务的例子\r\n9.4 小结\r\n\r\n第10章 控制Windows 2000服务\r\n\r\n10.1 编写服务控制程序\r\n10.1.1 使用服务控制管理器注册服务\r\n10.1.2 取消注册服务\r\n10.1.3 自动重启出错的服务\r\n10.2 编写控制面板小程序\r\n10.2.1 控制面板小程序接口\r\n10.2.2 CtlFileSpy:FileSpy的控制面板小程序\r\n10.3 小结\r\n\r\n第二部分 用户交互/桌面\r\n\r\n第11章 高级图形设备接口编程\r\n\r\n11.1 GDI基础\r\n11.2 设备描述表\r\n11.2.1 GDI映射模式\r\n11.2.2 GDI对象及其用法\r\n11.3 位图\r\n11.3.1 DDB与DIB\r\n11.3.2 16色DIB\r\n11.3.3 256色DIB\r\n11.4 DIB例子\r\n11.4.1 CDIGBitmap类\r\n11.4.2 CDmpPalette类\r\n11.4.3 CDibDoc类的修改\r\n11.4.4 主窗体类的修改\r\n11.4.5 CDibView类的修改\r\n11.5 路径\r\n11.6 元文件\r\n11.7 元文件的例子\r\n11.7.1 CMetaView类声明的修改\r\n11.7.2 CMetaView类析构函数的修改\r\n11.7.3 对CMetaView:OnDraw的修改\r\n11.7.4 鼠标左击\r\n11.7.5 对CMetaView:OnInitialUpdate的修改\r\n11.8 小结\r\n\r\n第12章 所有者作图和实制作图\r\n\r\n12.1 使用所有者作图控件\r\n12.2 实现所有者作图控件\r\n12.2.1 处理WM-DRAWITERM消息\r\n12.2.2 处理WM-MEASUREITEM消息\r\n12.2.3 处理WM-COMPAREITEM消息\r\n12.2.4 处理WM-DELETEITEM消息\r\n12.3 所有者作图实例:OwnDraw\r\n12.3.1 创建ClistItem结构\r\n12.3.2 处理所有者作图消息\r\n12.3.3 向列表框中加入项目\r\n12.3.4 处理WM-MEASUREITEM消息\r\n12.3.5 处理WM-DRAWITEM消息\r\n12.3.6 处理WM-DELETEITEM消息\r\n12.4 使用定制作图\r\n12.4.1 定制作图所使用的数据结构\r\n12.4.2 CustDraw:使用MFC的定制作图实例\r\n12.5 小结\r\n\r\n第三部分 COM和ActiveX\r\n\r\n第13章 COM和OLE\r\n\r\n13.1 COM和OLE概述\r\n13.2 常用COM和OLE技术\r\n13.2.1 复合文档\r\n13.2.2 可视化编辑\r\n13.2.3 自动化\r\n13.2.4 OLE数据传输\r\n13.2.5 拖放\r\n13.2.6 与其他应用程序集成\r\n13.3 使用COM和OLE编程\r\n13.3.1 使用COM接口\r\n13.3.2 标识COM接口和对象\r\n13.3.3 处理GUID\r\n13.3.4 处理版本问题\r\n13.3.5 使用IUnknown接口\r\n13.3.6 创建对象\r\n13.4 COM组件的一个例子\r\n13.4.1 使用Shell扩展机制\r\n13.4.2 理解快捷菜单扩展\r\n13.4.3 创建实例\r\n13.5 小结\r\n\r\n\r\n第14章 自动化\r\n\r\n14.1 创建使用自动化的可编程应用程序\r\n14.2 IDispatch接口\r\n14.2.1 IDispatch使用的数据类型\r\n14.2.2 IDispatch中的函数\r\n14.2.3 IDispatch接口与虚函数表\r\n14.3 创建使用MFC的自动化服务程序\r\n14.3.1 修改自动化选项\r\n14.3.2 修改文档类\r\n14.3.3 为AutoBub创建对话框\r\n14.3.4 为AutoBub画泡泡对象\r\n14.3.5 往AutoBub中加入自动化支持\r\n14.4 使用Visual Basic创建自动化控制程序\r\n14.5 在VBScript中使用自动化\r\n14.6 小结\r\n\r\n第15章 OLE拖放\r\n\r\n15.1 OLE剪贴板\r\n15.1.1 使用FORMATETC和STGMEDIUM结构\r\n15.1.2 处理FORMATETC结构\r\n15.1.3 使用DVTARGETDEVICE结构\r\n15.1.4 使用STGMEDIUM结构\r\n15.1.5 使用IDataObject接口\r\n15.2 使用OLE拖放\r\n15.2.1 OLE拖放来源\r\n15.2.2 OLE拖放目标\r\n15.3 拖放实例\r\n15.4 小结\r\n\r\n第16章 COM线程化模型\r\n\r\n16.1 COM线程化方案\r\n16.1.1 进程内COM服务程序\r\n16.1.2 进程外服务程序\r\n16.1.3 管理进程间的内存\r\n16.1.4 使用住所中的COM\r\n16.2 STA和MTA\r\n16.2.1 为每个线程选择一个往所\r\n16.2.2 线程最佳往所\r\n16.2.3 为COM对象选择住所\r\n16.2.4 在客户程序和COM对象间不匹配的住所\r\n16.3 在COM住所间调度\r\n16.3.1 共享接口指针的错误方法\r\n16.3.2 共享接口指针的正确方法\r\n16.4 小结\r\n\r\n第17章节 COM对象\r\n\r\n17.1 使用IDL\r\n17.1.1 深入MIDL属性\r\n17.1.2 编译MIDL源文件\r\n17.1.3 使用类型库\r\n17.1.4 使用IDL中的结构\r\n17.1.5 使用IDL中的枚举类型\r\n17.1.6 指针和IDL\r\n17.1.7 使用IDL中的方向属性\r\n17.2 使用ATL创建定制组件\r\n17.2.1 常用的ATL类\r\n17.2.2 ATL COM接口映射\r\n17.2.3 使用ATL向导\r\n17.2.4 将代理/存根代码合并到DLL中\r\n17.2.5 一个定制COM对象的示例\r\n17.3 使用moiker\r\n17.3.1 系统moiker的示例\r\n17.3.2 创建moiker实例\r\n17.3.3 将moiker转换为文本字符串\r\n17.3.4 根据显示名创建moiker\r\n17.4 连接点\r\n17.5 定制调度\r\n17.5.1 深入定制调度\r\n17.5.2 深入按值调度\r\n17.5.3 实现定制代理\r\n17.5.4 在服务器上实现IMarshal\r\n17.5.5 比较使用定制代理和标准代理的性能\r\n17.6 小结\r\n\r\n第18章 ActiveX控件\r\n\r\n18.1 什么是ActiveX控件\r\n18.2 ActiveX控件接口\r\n18.3 ActiveX控件的属性、事件和方法\r\n18.3.1 属性\r\n18.3.2 事件\r\n18.3.3 方法\r\n18.4 一个ActiveX控件示例\r\n18.4.1 创建工程\r\n18.4.2 绘制控件\r\n18.4.3 定义AxEdit的属性\r\n18.4.4 字符输入处理\r\n18.4.5 修改控件的位图\r\n18.5 测试ActiveX控件\r\n18.5.1 选择控件的测试容器\r\n18.5.2 使用TSTCON32测试容器\r\n18.5.3 测试属性\r\n18.6 使用ATL创建ActiveX控件\r\n18.6.1 使用ATL实现stock属性\r\n18.6.2 使用ATL实现custom属性\r\n18.6.3 通过ATL使用ambient属性\r\n18.6.4 在ATL工程中实现事件\r\n18.6.5 添加消息和事件处理程序\r\n18.7 用ATL构建的ActiveX控件\r\n18.7.1 PopButton的基本设计思路\r\n18.7.2 创建PopBtn工程\r\n18.7.3 用Visual Basic测试PopButton控件\r\n18.8 小结\r\n\r\n第19章 异步COM\r\n\r\n19.1 COM中的同步方法和异步方法\r\n19.2 Windows 2000中对异上不方法的支持\r\n19.2.1 IDL中的异步支持\r\n19.2.2 Windows 2000中其他新的异步组件\r\n19.2.3 使用Fire和Forget模式\r\n19.3 一个异步COM的示例\r\n19.3.1 IShop接口\r\n19.3.2 AsyncTest工程\r\n19.3.3 一个同步测试客户\r\n19.3.4 IShop接口的第二版\r\n19.3.5 一个异步测试客户\r\n19.4 小结\r\n\r\n第20章 DCOM\r\n\r\n20.1 位置透明性\r\n20.1.1 创建远程对象的实例\r\n20.1.2 使用IMultiQI接口\r\n20.1.3 确定外部引用是否有效\r\n20.2 DCOM中的安全性\r\n20.2.1 安全性的类型\r\n20.2.2 深入调用安全性\r\n20.2.3 深入模仿与伪装\r\n20.2.4 设置计算机的安全级别\r\n20.2.5 设置进程的安全属性\r\n20.2.6 深入安全模块\r\n20.2.7 设置接口的客户端安全属性\r\n20.2.8 管理服务器端的安全性\r\n20.3 使用DCOM配置程序\r\n20.3.1 使用DCOM Config设置系统端属性\r\n20.3.2 使用DCOM Config设置特定AppID的属性\r\n20.4 小结\r\n\r\n第四部分 COM+\r\n\r\n第21章 COM+服务简介\r\n\r\n21.1 事务简介\r\n21.1.1 ACID:事务处理的四大特性\r\n21.1.2 事务的分类\r\n21.1.3 两阶段提交协议\r\n21.2 深入COM+内的事务\r\n21.3 构建一个可支持事务处理的COM+组件\r\n21.3.1 使用Visual Basic构建COM对象\r\n21.3.2 启示\r\n21.3.3 向COM+应用程序中添加组件\r\n21.4 小结\r\n\r\n第22章 构建COM+服务组件\r\n\r\n22.1 好的Component Service组件\r\n22.1.1 生命周期/无状态\r\n22.1.2 无状态对象\r\n22.1.3 活动\r\n22.2 编写事务组件\r\n22.2.1 创建通用事务组件\r\n22.2.2 使用Visual C++创建事务性COM+对象\r\n22.2.3 使用Visual Basic创建事务性COM+对象\r\n22.3 使用COM编译器支持类\r\n22.3.1 TLH和TLI:检查输出\r\n22.3.2 COM编译器命令属性\r\n22.3.3 使用com-error产生和捕捉错误\r\n22.3.4 使用任何数据:-variant-t\r\n22.3.5 使用BSTR:bsrt-t\r\n22.4 使用多个COM+对象\r\n22.4.1 组合COM+对象的事务生命周期\r\n22.4.2 有多个对象参与的事务的输出\r\n22.4.3 错误处理\r\n22.4.4 传递参数和接口\r\n22.5 小结\r\n\r\n第23章 使用IIS与COM+\r\n\r\n23.1 WEB应用程序基础\r\n23.1.1 ASP概览\r\n23.1.2 脚本示例\r\n23.1.3 ASP应用程序\r\n23.1.4 内置的ASP对象\r\n23.2 构建WEB应用程序\r\n23.3 实现方法\r\n23.3.1 对HTML窗体的处理\r\n23.3.2 管理cookie\r\n23.3.3 创建cookie\r\n23.3.4 Server Variables集合\r\n23.3.5 对ASP错误的处理\r\n23.3.6 定义全局关键字\r\n23.3.7 强制次序\r\n23.3.8 用Java Script简化重定向过程\r\n23.3.9 管理对象的更为简单的方法\r\n23.3.10 使用二进制数据\r\n23.3.11 编写动态代码\r\n23.3.12 动态地调整内容的大小\r\n23.3.13 数据验证\r\n23.3.14 下载文件\r\n23.3.15 发送email\r\n23.3.16 浏览器的功能\r\n23.4 组件开发\r\n23.4.1 一个简单的ASP组件\r\n23.4.2 内容更丰富的ASP组件\r\n23.5 事务性的ASP页\r\n23.6 小结\r\n\r\n第24章 使用COM+驻留内存数据库\r\n\r\n24.1 驻留内存数据库\r\n24.2 一个简单的示例\r\n24.2.1 创建IMDB\r\n24.2.2 创建IMDB数据源\r\n24.2.3 引用资源表\r\n24.3 IMDB的一些细节问题\r\n24.3.1 在OLE DB级支持哪些接口\r\n24.3.2 特定条件是如何与OLE DB使用者模板相关的\r\n24.3.3 ADO使用的细节\r\n24.4 小结\r\n\r\n第25章 高级COM+服务\r\n\r\n25.1 通过对象共享和负载平衡获得可扩展性\r\n25.1.1 实现IObjectControl\r\n25.1.2 动态负载平衡\r\n25.2 一些高级的事务概念\r\n25.2.1 避免死锁的阻塞\r\n25.2.2 IObjectConstruct接口\r\n25.2.3 特定情况下的事务控制\r\n25.2.4 由客户控制事务\r\n25.3 排队组件\r\n25.3.1 什么是排队组件\r\n25.3.2 排队组件是如何工作的\r\n25.3.3 编写排队组件\r\n25.3.4 使用排队组件发送返回消息\r\n25.4 异步分发信息\r\n25.4.1 出版者/订户结构简介\r\n25.4.2 构建出版者/订户工程\r\n25.5 小结\r\n\r\n第五部分 分布式Windows 2000服务\r\n\r\n第26章 管道\r\n\r\n26.1 管道的类型\r\n26.2 无名管道\r\n26.2.1 创建和关闭无名管道\r\n26.2.2 管道的读和写\r\n26.2.3 使用无名管道与另一进程通信\r\n26.2.4 使用无名管道的一个示例\r\n26.3 有名管道\r\n26.3.1 有名管道的类型\r\n26.3.2 创建和关闭有名管道\r\n26.3.3 连接和使用有名管道\r\n26.3.4 使用有名管道的示例\r\n26.4 小结\r\n\r\n第27章 活动目录\r\n\r\n27.1 活动目录概览\r\n27.1.1 名字空间组织\r\n27.1.2 树和森林\r\n27.2 使用ADSI管理活动目录\r\n27.2.1 在Visual Basic和Visual C++中使用ADSI\r\n27.2.2 ADSI绑定字符串\r\n27.2.3 ADSI辅助函数 \r\n27.2.4 无服务的绑定和ADSI\r\n27.2.5 ADSI所提供的COM接口\r\n27.3 其他资源\r\n27.4 小结\r\n\r\n第28章 MSMQ\r\n\r\n28.1 Microsoft Message Queue Server简介\r\n28.1.1 MSMQ和有名管道\r\n28.1.2 安装MSMQ\r\n28.1.3 消息队列的类型\r\n28.1.4 公用队列和专用队列\r\n28.2 MSMQ对象属性\r\n28.2.1 队列属性\r\n28.2.2 消息属性\r\n28.2.3 机器属性\r\n28.2.4 内存分配\r\n28.3 使用Win 32 API创建和管理消息队列\r\n28.3.1 创建消息队列\r\n28.3.2 打开已有的队列\r\n28.3.3 向消息队列发送消息\r\n28.3.4 从消息队列中接收消息\r\n28.3.5 关闭消息队列句柄\r\n28.3.6 删除消息队列\r\n28.4 用Visual Basic编写的消息队列客户程序\r\n28.5 小结\r\n\r\n第29章 集群服务器\r\n\r\n29.1 集群服务器的结构\r\n29.1.1 集群服务器的硬件\r\n29.1.2 MSCS软件组件\r\n29.1.3 集群的启动和恢复\r\n29.2 集群API\r\n29.2.1 集群对象管理API\r\n29.2.2 资源DLL API\r\n29.2.3 集群管理扩展API\r\n29.3 一个可感知集群的示例\r\n29.3.1 ClusterQuote工程\r\n29.3.2 QuoteClient工程\r\n29.3.3 High Availability Quotes集群资源类型\r\n29.4 小结
无封面